JVM学习笔记

 JVM 9大醉成部分,但重点是堆和GC

java栈和GC有意义,其他了解即可 

堆、栈、方法区的关系

 堆

 堆这一块区域,分为新生代和老生代两块区域。划分的依据是实例化的对象经过的GC的次数。

新生代分为eden、from、to 或者说 eden、s0,s1区,s0,s1大小相等并且可以相互转换角色(结合垃圾回收机制的复制算法理解)。过程:刚被实例化存在eden,经过一次GC后如果对象还存活,还被使用,该对象进入s0或s1区(所有对象要么在s0,要么在s1),之后每经过一次GC,年龄加1,当经过一定次数GC后(默认是15次)进入老年代。

s0,s1大小相等并且可以相互转换角色的理解(结合垃圾回收机制的复制算法理解)

复制只对s0和s1区域,不是eden

 线程私有的内存空间(对一个有很多类和方法组成的复杂程序,从全局来看,栈是运行过程中的临时变量和数据)

 栈由三部分构成,局部变量表、操作数栈和帧数据区。了解,没必要专门看。

方法区

 方法区式一块所有线程共享的内存区(和栈一样),保存系统的类信息(类的定义、方法,常量等)。

方法区的大小决定了系统可以保存多少类,定义类太多会导致方法区溢出,JVM抛出内存溢出错误。 但是一般不用考虑,足够用。

 

垃圾回收机制算法

 1、引用计数法

    对象被其他引用时计数器加1,引用失效时减1,缺点:无法处理循环引用(循环引用时有bug)、并且加减操作浪费系统性能。

2、标记清除法

    对象操作分为标记和清除两个阶段,先对要清除的对象标记,再进行清除,但清除并不一定能玩出干净,留下碎片。缺点:空间碎片化不连续。

3、复制算法(用在新生代):将内存空间分为两块,每次使用一块,需要回收的时候,将还存活使用的对象复制到另外一块去,将当前内存块清空即可。两块内训块交替使用。

4、标记整理法(老年代使用):在标记清除法优化,把需要清理的对象标记出来,把存活的对象压缩到内存的一段,而后再清理。

老年代和新生代使用不同的算法:

新生代对象GC频繁(对象死的快,存活的少)清除的对象多

老年代对象存活的概率比较高,清除对象少

新生代、老年代使用不同特点算法,使内存操作最小化来提高整个JVM性能。

其他:

5、分代回收算法:内存分为多块,不同内存区域采用不同的回收算法,一般区分老年代和新生代。目前用的就是。

垃圾回收时的停顿现象;

系统会进入停顿,瞬间终止所有线程,保证垃圾回收高高效执行。一是终止所有线程才不会有新的垃圾产生。二是保证了系统状态在该瞬间的一致性。

 

 

 

《深入理解Java虚拟机》--阅读笔记(思维导图,干货收好)https://blog.csdn.net/iemdm1110/article/details/53301192

JVM基础面试题及原理讲解 http://www.importnew.com/31126.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值