JVM Heap认知
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM Heap认知相关的知识,希望对你有一定的参考价值。
一、JVM Heap分为三部分:新生代、老年代、永久代;
新生代:用于存放JVM新分配的java对象;
老年代:新生代中经过垃圾回收没有回收掉的对象将被copy到老年代;
永久代:存放Class、Method元信息,也就是反射对象,一般设置为128M足够,设置原则是预留30%空间。
二、GC的引发:
1、新生代拥有2个线程;
(1)当新生代的Eden代满了引发普通GC,仅仅回收新生代;
(2)新生代空间不足时,会把存活的对象转移到老生代。
2、老年代:当老年代满时引发Full GC,它将会同时回收新生代、老年代。
3、永生代:当永生代满时引发Full GC, 它将会把Class 、Method元信息卸载。
三、何原因导致OutOfMemoryException
1、JVM98%代时间都在内存回收;
2、每次回收的内存小于2%。
满足这两个原因才会处发。
四、性能优化
希望达成的目标:
1、GC的时间足够的小;
2、GC的次数足够的少;
3、发生Full GC的周期足够的长。
需要做的事情:
1、建少使用全局变量和大对象;
2、调整新生代的大小到最合适;
3、设置老年代的大小为最合适;
4、选择合适的GC收集器。
优化方面:
1、线程池:解决用户响应时间长的问题;
2、链接池;
3、JVM启动参数:调整各代的内存比例和垃圾回收算法,提供吞吐量;
4、程序算法:改进程序逻辑算法提高性能。
五、JVM监控
java自带的监控工具比较多,下面仅使用了2种:
1、jstat -gcutil [java PID] 1000(间隔毫秒数) 5(打印的条数);例子:jstat -gcutil 25 1000 5
2、jmap -heap 25
以上是关于JVM Heap认知的主要内容,如果未能解决你的问题,请参考以下文章