JVM之内存管理

运行时数据区包括五部分: 程序计数器,JVM栈,本地方法栈,堆,方法区,前三种线程私有,后两种内存分配是动态的,所以GC只关注这两部分。

程序计数器:线程执行字节码的行号指示器,记录字节码指令地址,执行本地方法为空

JVM栈:方法执行时建立栈帧,存放 局部变量表,基本数据类型的值,对象引用,动态链接,方法出口

堆:(字符串常量池移入了堆中(JDK7做的事情))存放对象实例,成员变量,数组值,分为新生代(包括三部分 Eden from to 8:1:1)和老生代 比例默认1:2

元空间(MetaSpace):存放类信息(Method Field)   用本地内存空间来存储   

每个区域异常原因:

  堆:对象太多

  栈:请求栈深度大于限制,比如很大的递归

  方法区:永久代太多

内存泄漏:分配出的内存没有被回收回来,失去控制

内存溢出:程序所需内存超出系统分配上限

 

引用对对象的访问方式:1.句柄,引用指向实例数据指针和类型数据指针,这两个指针分别指向实例数据和对象类型数据

           2.直接指针 引用指向实例数据和类型指针,指针指向类型数据

 

posted @ 2017-06-18 17:06  雪浪snowWave  阅读(149)  评论(0编辑  收藏  举报