java垃圾回收机制
为什么需要了解GC和内存分配呢?
当需要排查各种内存一出,内存泄漏问题是,当垃圾收集成为系统达到更高并发量的瓶颈时,我们需要对这些“自动化”的技术实施必要的监控和调节。
java垃圾回收机制作用:有效防止内存泄漏,有效使用可用内存。
GC判断是否回收的标准:当一个对象不再被使用时,那么这个对象就是可以被回收的。
GC(Gabage Collection)工作原理:创建对象时,GC就开始监视这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理heap(堆)中的素有对象。通过这种方式确定哪些对象是“可达的”,哪些是“不可以达的”。
引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器都为0的对象是不可能在被使用的。但是java中没有选用引用计数算法最重要的原因是:他很难解决对象之间的相互循环引用的问题。
根搜索算法:通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
在Java语言中,可以作为GC Roots的对象包括以下几种:(如若不知道概念请看另一篇文章:java内存区域与内存溢出异常)
1)虚拟机栈(栈帧中的本地变量表)中的引用的对象。
2)方法区中的类静态属性引用的对象。
3)方法区中的敞亮引用对象。
4)本地方法栈中JNI(即Native方法)的引用对象。


浙公网安备 33010602011771号