首页 > 编程语言 > 详细

java-内存管理

时间:2014-06-16 13:40:01      阅读:383      评论:0      收藏:0      [点我收藏+]

一、jvm内存结构

程序计数器(Program Counter Register)、JVM虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stacks)、堆(Heap)、方法区(Method Area)

(1)PCR
尾随线程生命周期,记录当前运行到的.class字节码行数,用于多线程操作
(2)JVM Stacks
尾随线程生命周期,在方法运行中存储数据
bubuko.com,布布扣 
(3)Native Method Stacks
处理native方法,如object中的hashCodes()等
(4)Heap
存储全部实例对象和数组对象,内置GC
(5)Method Area

堆的组成部分,但不强制GC。存储的对象为执行时常量池、静态变量、JVM载入的类信息等


二、垃圾回收
堆和方法区须要进行垃圾回收,其它三个随线程生命周期创建销毁
垃圾判定算法
(1)引用计算器:对循环引用的对象无法回收

(2)根搜索:效率较低


垃圾清除算法
(1)标记、清除算法
  过程:内存紧张时,停止程序,遍历GC Root将可达的对象标记出可存活的对象,清除全部未使用的对象
  缺点:效率较低;清理出来的空暇内存不连续
(2)复制算法
  过程:将内存分成活动区间和空暇区间两块,新分配的内存在活动区间,内存紧张时进行GC,将活动区间中
            存活的对象,按顺序放入空暇区间
  缺点:浪费一半内存;对象存活率高时比較费复制操作
(3)标记、整理算法
  过程:类似(1)标记全部存活对象,又一次移动按内存顺序排列对象,将末端内存清除
  缺点:效率不高
(4)分代搜索算法
  过程:针对不同对象进行不同的回收算法。
  夭折对象(局部变量、暂时变量):复制算法(80%内存分配对象+10%活动区间+10%空暇区间)
  老不死对象(缓存对象、数据库连接对象、单例对象):标记、整理算法
  不灭对象(String池对象、class类信息):标记、整理算法

java-内存管理,布布扣,bubuko.com

java-内存管理

原文:http://www.cnblogs.com/yxwkf/p/3790083.html

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