0%

博客蹦了,重建中。。。

x

x

x

x

x

x

x

x

x

spring 前世今生

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来(有意思的是 Rod Johnson 专业不是计算机,他是悉尼大学的音乐学博士)。Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。

阅读全文 »

锁优化

减小锁持有时间

减小锁的持有时间可有效的减少锁的竞争。如果线程持有锁的时间越长,那么锁的竞争程度就会越激烈。因此,应尽可能减少线程对某个锁的占有时间,进而减少线程间互斥的可能。

减少锁持有时间的方法有:

  • 进行条件判断,只对必要的情况进行加锁,而不是整个方法加锁;
  • 减少加锁代码的行数,只对必要的步骤加锁。
阅读全文 »

作者:muggle

java线程锁的分类与实现

以下分类是从多个同角度来划分,而不是以某一标准来划分,请注意

  • 阻塞锁:当一个线程获得锁,其他线程就会被阻塞挂起,直到抢占到锁才继续执行,这样会导致CPU切换上下文,切换上下文对CPU而言是很耗费时间的
  • 非阻塞锁:当一个线程获得锁,其他线程直接跳过锁资源相关的代码继续执行,就是非阻塞锁
  • 自旋锁:当一个线程获得锁,其他线程则在不停进行空循环,直到抢到锁,这样做的好处是避免了上下文切换
  • 可重入锁:也叫做递归锁,当一个线程外层函数获得锁之后 ,内层递归函数仍然可以该锁的相关代码,不受影响。
  • 互斥锁:互斥锁保证了某一时刻只能有一个线程占有该资源。
  • 读写锁:将代码功能分为读和写,读不互斥,写互斥;
    阅读全文 »

作者:muggle

java并发相关概念

同步和异步

同步和异步通常来形容一次方法的调用。同步方法一旦开始,调用者必须等到方法结束才能执行后续动作;异步方法则是在调用该方法后不必等到该方法执行完就能执行后面的代码,该方法会在另一个线程异步执行,异步方法总是伴随着回调,通过回调来获得异步方法的执行结果;

并发和并行

很多人都将并发与并行混淆在一起,它们虽然都可以表示两个或者多个任务一起执行,但执行过程上是有区别的。并发是多个任务交替执行,多任务之间还是串行的;而并行是多个任务同时执行,和并发有本质区别。
对计算机而言,如果系统内只有一个cpu,而使用多进程或者多线程执行任务,那么这种情况下多线程或者多进程就是并行执行,并行只可能出现在多核系统中。当然,对java程序而言,我们不必去关心程序是并行还是并发。

阅读全文 »

java 引用介绍

在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。对象引用被划分成简单的两种状态:可用和不可用。从JDK 1.2版本以后,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期,引用的强度由高到低为:强、软、弱、虚引用。

对象生命周期:在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)。上面的这7个阶段,构成了 JVM中对象的完整的生命周期。

阅读全文 »

muggle

1.类的生命周期

   类从被加载到虚拟机内存中内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(loading)、验证(verification)、准备(preparation)、解析(resolution)、初始化(initialization)、使用(using)卸载(unloading)七个阶段。其中验证、准备、解析三个阶段统称为连接(linking)。

阅读全文 »

1 标记-清除算法

标记-清除算法是最基础的算法,算法分为标记和清除两个阶段,首先标记出要清除的对象,在标记完后统一回收所有被标记的对象,标记方式为j《jvm系列之垃圾收集器》里面所提到的。这种算法标记和清除两个过程效率都不高;并且在标记清除后,内存空间变得很零散,产生大量内存碎片。当需要分配一个比较大的对象时有可能会导致找不到足够大的内存。

阅读全文 »