码迷,mamicode.com
首页 > 编程语言 > 详细

Java内存模型与垃圾收集

时间:2015-03-09 17:40:15      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:java   虚拟机   内存   

运行时数据区域:
         技术分享技术分享
     线程私有:
          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内存模型与垃圾收集

标签:java   虚拟机   内存   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!