【狂神说JAVA】JVM快速入门-4

本文介绍了Java的GC(垃圾回收)机制,包括GC的作用区、新生代和老年代的分区、复制算法、标记清除和标记压缩等。强调了不同GC算法的适用场景和优缺点,以及轻GC和重GC的发生时机。此外,还讨论了Java内存模型(JMM)的作用,如解决共享对象可见性问题,以及volatile关键字的应用。JVM调优涉及选择合适的GC算法以适应不同内存区域的需求。

15、GC垃圾回收机制

GC的作用区只有方法区和堆。分类有轻GC和重GC,轻GC主要是新生代,重GC是全局的清理。

幸存区一个from,一个to。两个相互转换。即幸存区0可以是from,也可以是to,幸存区1可以是from,也可以是to。

 

GC题目:

JVM的内存模型和分区,详细到每个区放什么?

堆里面的分区有哪些,Eden,from,to,老年区,说说他们的特点!

GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数器,怎么用的?

轻GC和重GC分别在什么时候发生。

 

GC算法:

  • 引用计数法,每个对象有被用的次数的统计,当次数为0时,就清除出去了。但是计数器本身也有消耗,并且碰到有些死循环,就会一直计数出不来。现在一般不采用此方法。

  • 复制算法,空的始终都是to。当幸存0和幸存1区都有一个的话,就把其中一个复制到另一个,这样,有两个对象的就是from,空的就为to。要是把from中的两个复制到to中,那么to就变成了from,from就变成了to。

图示

每次垃圾清理完之后,伊甸园区空,to区空了。其中的对象等到15次后,进入到养老区。

复制算法好处:没有内存的碎片;坏处,浪费一个幸存区空间,多了一半空间永远是空to。假设对象100%存活,复制成本很高。

最佳使用场景:对象存活度较低的时候,即在新生区中用复制算法。

 

  • 标记清除算法

回收垃圾时,扫描这些对象,对活着的对象进行标记。清除的时候,对没标记的清除掉。

优点:不需要额外的空间。

缺点:两次扫描,严重浪费时间,会产生内存碎片(对象存储的时候用hash,找内存也需要时间成本,对象位置很散乱)

弹幕说可达性分析。

  • 标记压缩法

也可以先标记+清除几次之后,再进行一次压缩。

  • GC算法总结

内存效率:复制算法 > 标记清除算法 > 标记压缩算法 (时间复杂度 )

内存整齐度:复制算法 = 标记压缩算法 > 标记清除算法

内存利用率:标记压缩算法 = 标记清除算法 > 复制算法

 

最优算法:没有最好,只有最合适的算法。GC:不同位置有不同的垃圾收集算法

年轻代,年轻区:存活率低,使用复制算法

老年代,老年区:区域大,存活率高,使用标记清除+标记压缩混合实现

所谓的JVM调优就是在调这些东西,根据实际情况,标记清除算法导致的内存碎片不是太多的情况就继续标记清除,直到最后碎片太多到达一定就标记压缩

 

后续学习可以百度GC分代收集算法,不同区域(代)用不同GC算法

一天时间学习JVM,不现实,多花时间看面试题,《深入理解JVM》,但是可以理解JVM的学习方法。

 

16、JMM

  • 什么是JMM?java memory model - java内存模型

  • 干嘛的?官方百科,博客,对应的视频。

作用:缓存一致性协议,

上述定义的理解:见下图。主内存的一个数,在各个线程中都拷贝了一份。

解决共享对象可见性的问题:用volilate。

  • 怎么学习?

JMM是抽象的概念,理论,那么看到多次volatile,所以学习volatile。再看看其他人的博客,又提到了可见性,写完了代码,立马刷新进主内存。volatile保证可见性,不保证原子性。

再搜JMM面试题答案

18、总结

学习新东西是常态 netty,spring cloud alibaba

面试回来,要分析面试题,要触类旁通这些题-百度面试题,将10道题变成100道题,总结出两三套解题思路。

通过大量的面试总结,得到一套解题思路

拿到一个新的面试知识点,就像JMM一样去准备面试:是什么,干嘛的,怎么学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值