JVM虚拟机简单总结

 JVM内存结构包括:程序计数器,虚拟机栈,方法区(元空间),本地方法栈,堆五部分。

堆:所有对象都会在堆中分配空间,其中常量池,字符串常量池及运行时常量池都只是存储对象的引用。

方法区:存储已加载到jvm的类的元数据信息(metadata)。

本地方法栈:虚拟机加载本地方法使用的空间

虚拟机栈:执行方法都会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息,当前线程正在执行的方法位于栈顶。

程序计数器:当前线程执行字节码的行号指示器

注意点:

1、平常说的堆内存和栈内存分别指的是上面虚拟机内存哪一块区域呢?堆内存没什么问题,栈内存主要是指虚拟机栈里面的局部变量表。

2、只有堆和方法区是线程共享的,其他几块区域都是线程私有的

3、堆可细分为新生代、老年代,再细分eden区、from survivor、to survivor及老年代;虚拟机默认分配比例为eden区:from survivor:to survivor比例为 8:1:1

二、判定对象已死方法

1、引用计数器 :对象被引用计数器加1,引用取消计数器减1;缺点是检查不出循环引用

2、可达性分析算法:当一个对象到GC Root没有任何引用链相连时,则表明这个对象是不可用的,可以被GC回收对象。

GC Root对象包括如下:

1、虚拟机栈(栈帧中的本地变量表)引用的对象

2、方法区中静态属性引用的对象

3、方法区中常量引用的对象

4、本地方法栈中(native方法)JNI引用的对象

三、引用分类

1、强引用:任何时候引用还在,GC都不可能回收掉此类对象

2、软引用(SoftReference):此类对象表示有用但非必需的,当内存快要发生溢出之前,将此类对象列入回收范围之内进行二次回收

3、弱引用(WeakReference):此类对象表示非必需对象,比软引用引用的对象还要再弱一些,当GC工作时,都将回收掉此类引用关联的对象

4、虚引用(PhantomReference):也叫幽灵引用或幻影引用,是四种引用中最弱的一种引用。无法通过此类引用获取到关联的对象,此类引用的用途是在被GC回收的时候收到系统通知

四、垃圾收集算法

1、标记-清除:将需要回收对象标记,然后GC;缺点是容易造成不连续的内存空间

2、复制算法:将可用内存分为两块,使用内存都分配在其中一块,另一块先保留,当一次GC之后,将左边存活的对象复制到另一块内存。商用虚拟机将内存分为eden区、from survivor、to survivor三块区域,其中默认比例为8:1:1,内存优先分配在eden区、from survivor区,GC之后将存活对象复制到to survivor区,如果to survivor区内存不足以存放存活对象,那么将会被担保复制到老年代。

3、标记-整理:将需要回收对象先进行标记,然后将存活对象同一移动到一边,然后进行GC

4、分代收集算法:新生代考虑每次GC有大批对象死去,所有复制的存活对象较少,采用复制手机算法比较合理;老年代对象存活率高,没有额外空间为老年代担保,则采用标记-清除或者标记-整理算法比较合理。

五、垃圾收集器 (这块内容较复杂,反正就是新生代用一类收集器,老年代用一类收集器)

六、虚拟机类加载器加载class过程(双亲委派模型)

note:同一个虚拟机不同的类加载器加载的同一个类导致的结果是两个类不相等。

1、双亲委派机制的工作过程:如果一个类加载器收到类加载的请求,首先它会将加载请求委派给父类加载器,父类加载器依次委派给上层类加载器,直到请求到达顶层类加载器,顶层类加载器检查自身能否加载此类,如果不能加载此类,那么将无法加载类的请求反馈给子类加载器,子类加载器才会尝试加载类。

双亲委派模型的好处:采用双亲委派模型的好处是比较安全,当黑客为了欺骗虚拟机,伪造一个Object类,试图采用自己构建的类加载器来加载此类,由于双亲委派首先会去询问顶层类加载器,因此Object首先会被顶层BootStrap ClassLoader加载掉。

七、volatile变量

1、volatile变量只能保证可见性,不符合下面两条规则的话就必须加锁处理。

        运算变量并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。

        变量不需要与其他的状态变量共同参与不变约束。

volatile优点:volatile同步的读操作跟普通变量几乎差不多,写操作会慢一些,因为它要在本地代码中插入内存屏障指令来保证处理器不乱序执行。大多数场景下volatile的性能的总开销要比锁低。如果场景符合,一般就采用valatile进行同步。

未完待续。。。

猜你喜欢

转载自blog.csdn.net/liangtianmeng/article/details/81075172