jvm对象存活判定算法

来源:互联网 发布:目标检测 知乎 编辑:程序博客网 时间:2024/05/27 08:13

 

程序计数器、虚拟机栈、本地方法栈3个区域随线程生,随线程而灭


栈中的栈帧随着方法的进入和退出而有条不紊的执行这出栈和入栈操作


每一个栈帧中分配多少内存基本上是在类结构确定下来是就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑回收问题,因为方法结束或者线程结束时,内存就跟着回收了。


因此我们主要学习java堆和方法区的内存分配和回收。

一、对象存活判定算法

1、引用计数算法

原理:给对象添加一个引用计数器,每当有一个地方引用它时,计数器加1;引用失效时,计数器减1;计数器为0说明可被回收。
缺点:很难解决对象相互循环引用的问题(对象相互循环引用,但其实他们都已经没有用了)。

2、可达性分析算法

   java虚拟机采用的算法。
  原理:通过一些列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
  在java语言中,可作为GC Roots的对象包括下面几种:
       虚拟机栈(栈帧中的本地变量表)中引用的对象。
       方法区类静态属性引用的对象。
       方法区中常量引用的对象。
       本地方法栈中JNI引用的对象。


0 0
原创粉丝点击