JAVA-OPTS思考

来源:互联网 发布:红警for mac 编辑:程序博客网 时间:2024/06/05 01:16

常见的JAVA-OPTS的配置项。

JAVA_OPTS=”-server -Xms1536m -Xmx1536m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:PermSize=96m -XX:MaxPermSize=256m -Xmn500m -XX:MaxTenuringThreshold=5″

-Xms:设置堆内存池的最小值

-Xmx:设置堆内存池的最大值

-XX:NewSize:设置新对象生产堆内存

-XX:MaxNewSize:设置最大新对象生产堆内存

-XX:PermSize:设置Perm区的大小

XX:MaxPermSize:设置Perm区的最大值

-Xmn:设置Young区的大小

-XX:MaxTenuringThreshold:设置垃圾最大年龄。

更加详细的说明,请参考图1

图1

 

看到这里,或许你会迷糊什么是堆内存,什么Perm区?这样就引出了第二个思考:JAVA内存模型。

JAVA内存模型如图2所示。

 

图2

JAVA的内存模型可以分为3个代:Young、Tenured、Perm。有的版本又叫:New、Old、Perm。中文叫:年轻代、终生代、永久代。或许中文还有其他的叫法,但是表示的意思是一样的。

Young和Tenured共同组成了堆内存(heap)。

Young(年轻代)还可以分为Eden区和两个Survivor区(from和to,这两个Survivor区大小严格一至)。新的对象实例总是首先放在Eden区,Survivor区作为Eden区和 Tenured(终生代)的缓冲,可以向 Tenure(终生代)转移活动的对象实例。如图3所示。

 

图3

在明白了JAVA内存模型后,就引出了第三个思考:Jconsole在性能测试中的使用。Jconsole是我们在性能测试中常用的工具,打开Jconsole后,可以看到很多监控图表。当你明白JAVA内存模型后,也就很容易明白Jconsole的监控图表了。如图4所示。

 

图4

在Jconsole图中,我们可以很明显看到内存可以分为堆内存和非堆在堆内存。在堆的上面有三个柱子,分别代别的是:Eden、Survivor、Old。Old区就是Tenured区。

在了解上述知识后,我们在使用Jconsole来监控应用的内存时,会更加清晰。



记于2011.9.23     黯風夜隱

原创粉丝点击