首页 > 代码库 > JVM垃圾回收机制

JVM垃圾回收机制

wKioL1QNO6izzer8AAESnZt2VL0446.jpg


jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁。这里面主要保存线程本地变量名和局部变量值。

本地方法栈: 调用本地jni方法的时候而创建的。这里分配的jvm之外的内存空间。方法调用结束之后销毁。

pc寄存器 : 这个保存线程当前执行的字节码指令

堆:主要保存创建的对象。

方法区:保存class相关的信息。主要是class的一个内存结构信息

常量池:方法区的一部分,主要保存class内存结构中常量值 例如String值,public static final 类型的值

我们这里说的垃圾回收,主要是java虚拟机对堆内存区域的回收


1 首先的问题是:jvm如何知道哪些对象需要回收 ?

     目前有两种算法

· 引用计数法

     

· root搜索算法

     以下对象会被认为是root对象:

· 被启动类(bootstrap加载器)加载的类和创建的对象

· jvm运行时方法区类静态变量(static)引用的对象

· jvm运行时方法去常量池引用的对象

· jvm当前运行线程中的虚拟机栈变量表引用的对象

· 本地方法栈中(jni)引用的对象



基本上 jvm内存回收有三种 基本算法

   


· 标记-清除

wKioL1QNPYCifbu2AADQXgmMPyE564.jpg


· 标记-清除-压缩


wKioL1QNPYKCEbjCAADK-yP1ZQ8824.jpg





· 标记-清除-复制


wKiom1QNPXiQBfFHAAEBWxkdXBU281.jpg







本文出自 “android开发” 博客,请务必保留此出处http://9238253.blog.51cto.com/9228253/1549890

JVM垃圾回收机制