sun培训笔记--java内存管理,GC调优

来源:互联网 发布:手机淘宝2017旧版本 编辑:程序博客网 时间:2024/05/16 05:06

 一:java 性能优化,GC
java 5之后的所有JVM,Heap堆的分配:分为两部分,一部分是需要GC的堆空间,它们是Eden,Tune,另外一部分是永久存在的对象(Object,Class),JVM永远不会对其进行GC。
对于需要GC的堆空间,jvm每次先对Eden进行GC,对于GC后仍然存活的对性,将其移动到Tune区域。
而且Tune空间也是对半分为两部分,用于加速相互Copy compact的压缩算法。

经验值:
1 MaxHeapSize = MinHeapSize
2 对于需要GC的Heap,Eden:Tune  一般值为:1:3. ex.-XX:newRatio=1:3
3 java中的内存泄露? 是指那些在运行时不需要,但是仍然被活动对象所引用到的对象。 何谓jvm中的活动对象?它们有三类:Local Var,Static Var ,

GC的分类:
1 串行GC   VS  并行GC
2 并发GC   VS  stop the world
3 Compact   VS  no Compact VS Copying
4 并发GC时,GC Thread占用一个CPu,建议4CPU的机器可以采用并发GC。否则很容易导致性能问题,因为GC会占用一个完整的CPU,抢占其它引用的cpu资源。

5 Incremental GC ,它的工作目标是 :减少引用中断的时间,将锁定Heap的时间分成若干次来降低Stop the world的时间。但是实际上多次中断的时间之和要比其它模式要长。 对于实时性要求高的引用建议采用此模式。
6  如果CPU多,可以适当增加Eden Heap的空间分配。可以提升性能。

性能调优,监控
1 NetBeans Profile 可以很容易监控到JVM的内存问题。而且免费在NetBeans中提供。
2 默认Java 1.5提供了JConsole能够连接到本地和远程JVM,观察memory,ClassLoader,Threads。采用JMX 方式连接。
3 在使用NetBeans Profile观察内存泄露问题时,观察每个Class的实例的Generation number,这个就是这个Class的所有实例的年龄枚举个数,如果有增无减,则很可能是内存泄露。
4 NetBeans中观察Class的实例,能够跟踪到该内存是code那里分配的。方便定位内存问题。
5 JPS 对应Linux系统中的ps命令。 ex. jps -l -o -v
6 Jstat -gcdetail without jmx.

原创粉丝点击