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认知的主要内容,如果未能解决你的问题,请参考以下文章

jvm

jvm 结构分析

找了很久的网上唯一的一套JVM底层Hotspot源码视频,免费送!

执行 jmap -heap 选项时 JVM 是不是停止?

JVM优化之循环展开(附有详细的汇编代码)

jvm的stack和heap,JVM内存模型,垃圾回收策略,分代收集,增量收集(转)