5.14日上午 jvm 调优 java社区日下的jvm调优

5.14日下午 jvm 调优 java社区日上的jvm调优5.14日下午? jvm 调优 java社区日上的jvm调优,这个哥们的pdf

5.14日下午 jvm 调优 java社区日上的jvm调优

5.14日下午? jvm 调优 java社区日上的jvm调优,这个哥们的pdf 很长 看着也很细 哈哈 分享给大家了(这个pdf 的主人啊 相信你共享没意见 那天讨论挺热烈的嘛嘿嘿)

另外还有个 工作中 从哪个谁谁谁那要来的 2个jvm相关的ppt 哈哈也分享个大家了...

摘点儿出来先睹为快哈哈

Java虚拟机的种类:

?Oracle Java虚拟机
–原Sun Java虚拟机
–原BEA JRockit
–两种Java虚拟机,都运行在Windows、Linux、Solaris平台
?HP Java虚拟机:
–与SUN JDK基本兼容,有自己独特的启动参数
–运行在HP UNIX上
?IBM Java虚拟机:
–与Sun JDK基本兼容
–启动参数的写法风格与Sun JDK、HP JDK非常不同
–主要用于WebSphere、跑在AIX上的中间件服务器
?开源Java虚拟机:
–与SUN JDK兼容

.......

Java虚拟机32 VS 64

尽量选择使用32位JDK:
–32位JDK在TPS测试中,结果比64位JDK要好;JDK 6.0启用指针压缩技术后,64位略微领先32位JDK
–主要适用于内存需求较小,CPU密集型应用
?64位JDK主要用于大内存应用:
–突破4G内存限制
–吞吐量并没有提高
–主要用于大内存需求的系统
–尽量启用指针压缩技术
IBM: -Xcompressedrefs
SUN:-d64 -XX:+UseCompressedOops
BEA:-XXcompressedRefs=true

?

..........

常见GC算法:
–SUN、HP的GC算法
–JRockit的GC算法
–IBM JDK的GC算法

........

?

根据回收器,简单分为:
–串行–XX:+UseSerialGC
Out of Box算法,年轻代串行复制,年老代串行标记整理,主要用于桌面应用
–并行–XX:+UseParallelGC
年轻代暂停应用程序,多个垃圾收集线程并行的复制收集,年老代暂停应用程序,与串行收集器一样,单垃圾收集线程标记整理。JDK 6.0启用该算法后,默认启用了-XX:+UseParallelOldGC,性能大为提高
–并发(Concurrent Low Pause Collector) –XX:+UseConcMarkSweepGC
启用该参数,默认启用了-XX:+UseParNewGC;简单的说,并发是指用户线程与垃圾收集线程并发,程序在继续运行,而垃圾收集程序运行于其他CPU上。
–Garbage First (G1) Garbage Collector
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
SUN JDK 6.0 Update14引入,实际生产环境中还没有采用

?

常见GC算法--SUN、HP

并行算法示例:
–-server -Xms1536m -Xmx1536m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseParallelGC-XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy -XX:SurvivorRatio=2 -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/tmp/server_gc$$.log
?并发算法示例:
–-server -Xms1536m -Xmx1536m -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC-XX:+UseParNewGC -XX:SurvivorRatio=2 -XX:MaxTenuringThreshold=16 -XX:+DisableExplicitGC -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSParallelRemarkEnabled -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/tmp/server_gc$$.log

?

常见GC算法--JRockit

根据回收器,简单分为:
–-XgcPrio:throughput
默认算法,主要用于桌面应用
–-XgcPrio:pausetime
-XgcPrio:pausetime -XpauseTarget:210ms 因为免费,所以最低只能设置到200ms。200ms是Real-Time JDK的分界线
–-XgcPrio:deterministic
动态调整的垃圾收集策略
?示例:
–-Xms1024m -Xmx1024m -Xgcprio:pausetime -Xpausetarget=210ms -XgcReport -XgcPause -Xverbose:memory

?

常见GC算法--IBM
?根据回收器,简单分为:
–-Xgcpolicy:optthruput
默认策略。对于吞吐量比短暂的GC 停顿更重要的应用程序,通常使用这种策略。每当进行垃圾收集时,应用程序都会停顿。
–-Xgcpolicy:optavgpause
通过并发地执行一部分垃圾收集,在高吞吐量和短GC 停顿之间进行折中。应用程序停顿的时间更短。
–-Xgcpolicy:gencon
以不同方式处理短期存活的对象和长期存活的对象。采用这种策略时,具有许多短期存活对象的应用程序会表现出更短的停顿时间,同时仍然产生很好的吞吐量。
–-Xgcpolicy:subpool
采用与默认策略相似的算法,但是采用一种比较适合多处理器计算机的分配策略。建议对于有16 个或更多处理器的SMP 计算机使用这种策略。这种策略只能在IBM pSeries? 和zSeries? 平台上使用。需要扩展到大型计算机上的应用程序可以从这种策略中受益。
?示例:
–-Xms768m -Xmx1024m -Xmn256m -Xgcpolicy:gencon

?

?

选择GC算法,遵循以下原则:
–评估程序类型
桌面应用还是服务器端应用
吞吐量优先还是响应时间优先
–仅适用64位JDK的算法
比如在IBM AIX 64位JDK环境下,当heap区大于16G后,subpool明显性能提高
–确定GC算法之后,再逐步调整小参数
-Xmn(-XX:NewSize -XX:MaxNewSize)
-XX:SurvivorRatio
-XX:MaxTenuringThreshold
.......
–测试期间实时监控
SUN、HP、JRockit都可以通过jstat命令进行实时监控
避免使用jmap -histo,原因是可能会造成Full GC

?

?

更多 看附件吧.....