jvm与GC

Posted jun10ng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm与GC相关的知识,希望对你有一定的参考价值。

https://juejin.im/post/5a15be736fb9a044fc4464d6

jvm

jvm把内存分为
1.方法区(Method Area)
2.堆区(Heap)
3.虚拟机栈(VM Stack)
4.本地方法栈(Native Method Stack)
5.程序计数器(Program Counter Register)
?6.常量池区
为什么新生代要有2个Survivorhttps://blog.csdn.net/antony9118/article/details/51425581

gc

引用计数算法

? 经典的引用计数算法,每个对象添加到引用计数器,每被引用一次,计数器+1,失去引用,计数器-1,当计数器在一段时间内为0时,即认为该对象可以被回收了。但是这个算法有个明显的缺陷:当两个对象相互引用,但是二者都已经没有作用时,理应把它们都回收,但是由于它们相互引用,不符合垃圾回收的条件,所以就导致无法处理掉这一块内存区域。

根搜索算法

Sun的JVM并没有采用这种算法,而是采用一个叫——根搜索算法,基本思想是:从一个叫GC Roots的根节点出发,向下搜索,如果一个对象不能达到GC Roots的时候,说明该对象不再被引用,可以被回收。如上图中的Object5、Object6、Object7,虽然它们三个依然相互引用,但是它们其实已经没有作用了,这样就解决了引用计数算法的缺陷。

四个应用状态

以上是关于jvm与GC的主要内容,如果未能解决你的问题,请参考以下文章

JVM探秘:GC日志收集与分析

JVM的三种常见GC:Minor GCMajor GC与Full GC

深入JVM系列之GC机制收集器与GC调优

深入JVM系列之GC机制收集器与GC调优(转)

JVM之垃圾收集器 (GC) 与内存分配策略

深入JVM《四》 GC算法与种类