打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java虚拟机学习(5):内存调优


来源:java2000_wl

链接:blog.csdn.net/java2000_wl/article/details/8090940


JVM调优主要是针对内存管理方面的调优,包括控制各个代的大小,GC策略。由于GC开始垃圾回收时会挂起应用线程,严重影响了性能,调优的目是为了尽量降低GC所导致的应用线程暂停时间、 减少Full GC次数。


代大小调优


最关键参数:-Xms、 -Xmx 、-Xmn 、-XX:SurvivorRatio、-XX:MaxTenuringThreshold、-XX:PermSize、-XX:MaxPermSize


-Xms、 -Xmx 通常设置为相同的值,避免运行时要不断扩展JVM内存,这个值决定了JVM heap所能使用的最大内存。


-Xmn 决定了新生代空间的大小,新生代Eden、S0、S1三个区域的比率可以通过-XX:SurvivorRatio来控制(假如值为 4  表示:Eden:S0:S1 = 4:3:3 )


-XX:MaxTenuringThreshold 控制对象在经过多少次minor GC之后进入老年代,此参数只有在Serial 串行GC时有效。


-XX:PermSize、-XX:MaxPermSize 用来控制方法区的大小,通常设置为相同的值。


1.避免新生代大小设置过小


当新生代设置过小时,会产生两种比较明显的现象,一是minor GC次数频繁,二是可能导致 minor GC对象直接进入老年代。当老年代内存不足时,会触发Full GC。


2.避免新生代设置过大


新生代设置过大,会带来两个问题:一是老年大变小,可能导致Full  GC频繁执行;二是 minor GC 执行回收的时间大幅度增加。


3.避免Survivor区过大或过小


-XX:SurvivorRatio参数的值越大,就意味着Eden区域变大,minor GC次数会降低,但两块Survivor区域变小,如果超过Survivor区域内存大小的对象在minor GC后仍没被回收,则会直接进入老年代,


-XX:SurvivorRatio参数值设置过小,就意味着Eden区域变小,minor GC触发次数会增加,Survivor区域变大,意味着可以存储更多在minor GC后任存活的对象,避免其进入老年代。


4.合理设置对象在新生代存活的周期


新生代存活周期的值决定了新生代对象在经过多少次Minor GC后进入老年代。因此这个值要根据自己的应用来调优,Jvm参数上这个值对应的为-XX:MaxTenuringThreshold,默认值为15次。


GC调优


1.GC搭配


参见另一遍垃圾收集器


2.查看JVM参数


命令行工具   可视化工具


3.GC日志参数


-XX:+PrintGCDetails


-XX:+PrintGCTimeStamps


-Xloggc:c:\Java\gc.log


本系列:



关注「ImportNew」

看更多 Java 技术精选文章

↓↓

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java 堆内存
Java GC工作原理以及Minor GC、Major GC、Full GC简单总结
简单例子验证Java对象的分配过程
JVM从零学习(六)堆
JVM的内存分配策略
JVM的内存管理和垃圾回收
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服