jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁。这里面主要保存线程本地变量名和局部变量值。
本地方法栈: 调用本地jni方法的时候而创建的。这里分配的jvm之外的内存空间。方法调用结束之后销毁。
pc寄存器 : 这个保存线程当前执行的字节码指令
堆:主要保存创建的对象。
方法区:保存class相关的信息。主要是class的一个内存结构信息
常量池:方法区的一部分,主要保存class内存结构中常量值 例如String值,public static final 类型的值
我们这里说的垃圾回收,主要是java虚拟机对堆内存区域的回收。
目前有两种算法
· 引用计数法
· root搜索算法
以下对象会被认为是root对象:
· 被启动类(bootstrap加载器)加载的类和创建的对象
· jvm运行时方法区类静态变量(static)引用的对象
· jvm运行时方法去常量池引用的对象
· jvm当前运行线程中的虚拟机栈变量表引用的对象
· 本地方法栈中(jni)引用的对象
基本上 jvm内存回收有三种 基本算法
本文出自 “android开发” 博客,请务必保留此出处http://9238253.blog.51cto.com/9228253/1549890
原文地址:http://9238253.blog.51cto.com/9228253/1549890