Java内存管理

Java 内存分为以下几个区块:

-- 只要对象是通过new来创建的, 该对象就会存在堆中

Eden -- 新生代

         -- Survivor 幸存对象

                from

                to

Tenured  -- 老年代

 

堆内存GC原理:

GC分为 minor GC和 full GC.

minor GC主要负责回收新生代对象, 它将不定时的做GC处理, 当新建一个对象时,对象会被放入Eden区, 

当Eden区满时,还存活的对象将被复制到survivor from区。当该survivor from区满时,此区的存活对象被复制到另外一个survivor to区,当第2个survivor区也满时,该区还存活的对象将被复制到年老区(tenured),当Eden+survivor from区满后系统会做一次minor GC.

minor GC采用的是Copying算法, 将这两个区域存活下来的对象复制到survivor to区, 同时对象的age将设为1, 每一次的minor GC都会增加age, 当对象的age增加到某一个阀值时该对象就会进入到Tenured 区

 

full GC 主要是针对Tenured区的对象进行GC, 它的执行频率远低于minor GC.

 

 

每个线程在执行每一个方法的时候都会申请一个栈帧, 每个栈帐都包含了局部变量区和操作数栈, 用于存放此次方法调用的临时变量,参数和中间结果

 

本地方法栈

用于支持 native方法的执行, 记录每一个native方法调用的状态.

 

方法区 --用于存放要加载的class, 静态变量, final类型的常量, 属性和方法信息.

Permanet  -- 持久代

 

 

 

你可能感兴趣的:(java内存管理)