首页 > 编程语言 > 详细

Java内存模型与垃圾收集

时间:2015-03-09 17:38:22      阅读:315      评论:0      收藏:0      [点我收藏+]
运行时数据区域:
         技术分享技术分享
     线程私有:
          1.程序计数器
               如果正在执行的方法为Native方法,程序计数器值为空。
          2.java虚拟机栈
               虚拟机栈描述java方法执行的内存模型:每个方法被执行时会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口。从方法的调用到执行完成,对应栈帧在虚拟机栈中入栈到出栈过程。
          3.本地方法栈
               与虚拟机栈作用相似。区别为虚拟机栈为虚拟机执行java方法服务,本地方法栈为虚拟机使用到的Native方法服务。
     线程共有:
          1.Java堆
               存放对象实例,垃圾回收机制主要管理区域。
          2.方法区
               存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码

对象访问: 
 技术分享        
     引用定位对象的访问方式
          1.使用句柄
               技术分享
               Java堆中会划分出一块内存作为句柄池,reference中存放对象句柄地址,句柄中包括对象实例数据和类型数据各自的具体地址信息
          2.直接指针
               技术分享
               使用直接指针访问方式,reference中直接存储对象地址,如上图。


垃圾收集
1. 引用计数法
          虚拟机并未采用!!! 
  收集算法直接,但并不能解决循环引用带来的内存泄露。
2.根搜索算法
          通过一系列GC ROOTS 对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当某对象到GC ROOTS没有引用链相连时,则证明此对象不可用。
     GCROOTS对象:
          虚拟机栈(栈帧中的本地变量表)中的引用的对象。
          方法区中的类静态属性引用的对象。
          方法区中常量引用的对象。
          本地方法栈中JNI(即Native方法)引用的对象。

引用类型:
     强引用 > 软引用 > 弱引用 > 虚引用





本文内容参考自: 深入理解JAVA虚拟机


Java内存模型与垃圾收集

原文:http://blog.csdn.net/zjuwangg/article/details/44155963

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!