/**
* 转载请注明作者longdick http://longdick.iteye.com
*
*/
Java 的内存模型由3个代组成,各个代的默认排列有如下图(适用JDK1.4.* 到 JDK6):
Java 的内存模型分为
Young(年轻代)
Tenured(终身代)
Perm(永久代)
有些旧版本也叫作
New
Old
Perm
叫法不同,表达的意思却是基本相同。
注意Young(年轻代)还可以分为Eden区和两个Survivor区(from和to,这两个Survivor区大小严格一至),新的对象实例总是首先放在Eden区,Survivor区作为Eden区和
Tenure(终生代)的缓冲,可以向
Tenure(终生代)转移活动的对象实例。
Tenure(终生代)中存放生命周期长久的实例对象,但并不是如它的名字那样是终生的,里面的对象照样会被回收掉。
Young和Tenure共同组成了堆内存。
Perm(永久代)则是非堆内存的组成部分。主要存放加载的Class类级对象如class本身,method,field等等。
有同学可能已经注意到了,每个代都有的Virtual区又是什么?
我们知道有一些参数可以影响以上各代的大小。
在JVM启动时,就已经保留了固定的内存空间给Heap内存,这部分内存并不一定都会被JVM使用,但是可以确定的是这部分保留的内存不会被其他进程使用。这部分内存大小由 -Xmx
参数指定。
而另一部分内存在JVM启动时就分配给JVM,作为JVM的初始Heap内存使用。影响这个的参数是 -Xms
,如果 -Xms
指定的值比-Xmx
的小,那么两者的差值就是Virtual内存值。随着程序的运行,Eden区、 Tenured区和Perm区会逐渐使用保留的Virtual空间。
如果没有具体指定,初始和最大堆内存将根据机器的内存计算得出。参数DefaultInitialRAMFraction
和 DefaultMaxRAMFraction
会影响最终的结果,如下表所示:
Formula
Default
initial heap size
|
memory / DefaultInitialRAMFraction
|
memory /
64
|
maximum heap size
|
MIN(memory / DefaultMaxRAMFraction, 1GB)
|
MIN(memory
/ 4, 1GB)
|
可以看到堆内存默认值最大不会超过1G。
JVM会根据堆内存的使用情况自动决定何时扩张和缩减实际堆内存的大小,可以用VM参数 -XX:MinHeapFreeRatio=<minimum>
和
-XX:MaxHeapFreeRatio=<maximum>
使用堆内存空闲百分比来定义,一般在32位机器上的默认值如下:
Parameter
Default Value
MinHeapFreeRatio
|
40
|
MaxHeapFreeRatio
|
70
|
-Xms
|
3670k
|
-Xmx
|
64m
|
当空闲堆内存所占堆内存百分比低于40%,JVM就会试图扩张堆内存空间;当空闲堆内存所占堆内存百分比高于70%,JVM就会试图压缩堆内存空间。
ps:以上默认值在不同平台会有不同的值,如果是64位系统,这些值一般需要扩张30%,来容纳在64位系统下变大的对象。
加上-XX:NewRatio=3
意味着 young(年轻代) 和 tenured(终生代)的比率是1:3,也就是说,eden区和survivor区容量之和将占总堆内存的1/4。
加上-XX:SurvivorRatio=6
设置eden区和 其中一个survivor space的比率是1:6,也就是说,其中一个survivor space占年轻代1/8的容量 (可以想想为什么不是1/7)。
另外还有 -XX:NewSize
-XX:MaxNewSize
指定年轻代的初始值和最大值。
32位系统下默认值如下:
Default Value
Parameter
Client JVM
Server JVM
NewRatio
|
8
|
2
|
NewSize
|
2228K
|
2228K
|
MaxNewSize
|
not limited
|
not limited
|
SurvivorRatio
|
32
|
32
|
延伸阅读:
图解JVM在内存中申请对象及垃圾回收流程
三种GC大揭秘
参考资料:
http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
分享到:
相关推荐
jvm内存模型,jvm脑图,jvm调优,jvm垃圾回收算法,jvm垃圾回收器,逃逸算法等总结。
jvm内存模型.pdf
JVM内存模型深度剖析与优化
JVM 内存模型整理
有关JVM内存模型的概述,用于对JVM的整体把握从而针对性的学习
JVM内存模型及分区
第二节:JVM内存模型 1.1 概念 1.2 JVM内存模型 1.3 Heap堆内存模型 第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)...
前段时间做JVM调优网上搜集的一些资料,里面有图形化讲解JVM内存使用和各个参数详细介绍等
JVM内存模型YYDS
jvm内存模型图
深入详解JVM内存模型与JVM参数详细配置,感兴趣的小伙伴们可以一块学习下。
Java 虚拟机JVM内存模型与垃圾收集策略,看完此资料,JVM将不再话下
java jvm内存模型
主要为大家讲解JVM内存模型|内存结构|内存屏障,他们的概念,有什么关联以及各种的功能
jvm内存模型
jvm内存模型组成部分
JVM内存模型和性能优化
深入详解JVM内存模型与JVM参数详细配置.pdf
一、JVM整体结构及内存模型 二、JVM内存参数设置 三、逃逸分析