java内存管理

一、jvm内存结构

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

(1)PCR
跟随线程生命周期,记录当前执行到的.class字节码行数,用于多线程操作
(2)JVM Stacks
跟随线程生命周期,在方法执行中存储数据
 
(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内存管理,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。