JVM二、JVM运行机制二、常见JVM配置参数、

常见JVM配置参数

trace跟踪参数、堆的分配参数、栈的分配参数

JVM二、JVM运行机制二、常见JVM配置参数、

gc前为4790k,gc后为374k,回收了4m左右,当前堆的总大小为16m左右。

JVM二、JVM运行机制二、常见JVM配置参数、

JVM二、JVM运行机制二、常见JVM配置参数、

PrintGCDetails是在程序结束后打印的堆详细内容。 【tenured genration 老年代】【conpacting perm gen 永久区】

-----------------------------------

重定向GC的log , 用来做一些开发的问题分析。

JVM二、JVM运行机制二、常见JVM配置参数、

JVM二、JVM运行机制二、常见JVM配置参数、

这个打印信息是非常详尽的, 主要对比前后的占用百分比变化。

--------------------------------------

监控系统中每个类的加载

JVM二、JVM运行机制二、常见JVM配置参数、

--------------------------------------

JVM二、JVM运行机制二、常见JVM配置参数、

解读:Byte数组有89万个实例 , 占用了470266000字节。这个命令查看程序中使用较多的类对象,可以用来预估outOfMemory造成的原因。

------------------------------------------------------------------------------

堆的分配参数

JVM二、JVM运行机制二、常见JVM配置参数、

打印:

Xmx是最大的20m , free mem是当前空闲的堆空间比如4.3m , total mem是当前的总空间如启动设定的5m实际输出4.8m。

JVM二、JVM运行机制二、常见JVM配置参数、

当最小堆空间不够的时候系统会扩大总内存,也就是total mem的值会变大比如9m。System.gc()执行gc。

问题:

-Xmx和-Xms保持什么样的关系能使系统性能尽可能的好?

java程序与jre绑定,给用户使用, 如何使jre尽可能的小?

JVM二、JVM运行机制二、常见JVM配置参数、

JVM二、JVM运行机制二、常见JVM配置参数、

新生代只有1m,很小byte数组生成有10m 。可以看到日志中10m全部在老年代,过程中没有触发gc。

----------------

JVM二、JVM运行机制二、常见JVM配置参数、

没有触发gc,所有分配的对象空间都在内存里。

----------------

JVM二、JVM运行机制二、常见JVM配置参数、

进行过两次gc,新生代1139k和老年代2508k还留在系统里。

----------------

JVM二、JVM运行机制二、常见JVM配置参数、

调大幸存代的空间,使得其可以正常使用,就不用进入到老年代。 使得gc进行了三次回收分别回收了大概1m、3m、3m共7m,也可以看出生成10m的空间只有新生代中被使用了3m的堆内存空间,其余7m被gc了。

---------------

JVM二、JVM运行机制二、常见JVM配置参数、

增大新生代的空间,可以看出幸存代也相应增大, 此时同样是回收了7m , 内存中剩余3m,但是此时只进行了2次gc。

---------------

JVM二、JVM运行机制二、常见JVM配置参数、

幸存代占新生代的空间越小但不能小到利用不起来,就可以更合理的利用内存空间,同时减少gc的次数 。此时调小幸存代大小可以看到只gc了一次,内存使用7m不多也不少。

------------------------------------------------------------------------------

JVM二、JVM运行机制二、常见JVM配置参数、

在系统宕掉之前将堆内存信息全部转存到文件中。用于事故发生后推测当前系统宕掉时到底发生了什么事情。

-----------------

JVM二、JVM运行机制二、常见JVM配置参数、

宕掉后我们就可以在a.txt中看到线程的信息。这个脚本我们自己配置成邮件发送、报警、重启程序等等脚本。

-----------------

JVM二、JVM运行机制二、常见JVM配置参数、

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

JVM二、JVM运行机制二、常见JVM配置参数、

JVM二、JVM运行机制二、常见JVM配置参数、

JVM二、JVM运行机制二、常见JVM配置参数、

-----------------

JVM二、JVM运行机制二、常见JVM配置参数、

每个线程都会创建一个栈空间,因此如果程序要尽可能多的使用线程的话就尽量减小每个栈空间。但是栈的大小决定了函数调用的深度, 所以如果栈空间太小而递归调用太深就会造成栈溢出。

JVM二、JVM运行机制二、常见JVM配置参数、

这个没有出口的递归必然会导致栈溢出,右侧是不同大小的栈空间和函数执行的深度。