查询JVM参数默认值:java -XX:+PrintFlagsFinal -version | grep 参数名称如 PrintGCDetails
1.-Dfile.encoding 指java文件编码 UTF-8。
2.-Dsun.jnu.encoding 操作系统的默认编码 UTF-8。
3.-Djava.io.tmpdir 临时文件地址 /tmp。
4.-Djava.net.preferIPv6Addresses 支持ipv6, false。
5.-XX:+DisableExplicitGC 禁止代码中调用GC例如:System.gc();
6.-XX:+PrintGCDetails 打印GC详细日志。
7.-XX:+PrintHeapAtGC 每次GC后都打印堆信息。
8.-XX:+PrintTenuringDistribution 打印对象年龄,即经历几次垃圾收集。
9.-XX:+UseConcMarkSweepGC 使用并发收集器,如CMS(标记清除)。
10.-XX:+PrintGCTimeStamps GC日志中打印时间戳(jvm启动时间到打印时的毫秒数)。
11.-XX:+PrintGCDateStamps GC日志中打印时间戳(服务器时间戳)。
12.-XX:CMSFullGCsBeforeCompaction=0 执行多少次FULL GC 执行才会对full gc进行压缩。
13.-XX:+UseCMSCompactAtFullCollection 使用并发收集器时,开启对full gc的压缩, 默认true。
14.-XX:CMSInitiatingOccupancyFraction=80 当老年代达到多少百分比执行full gc, 默认为-1,计算公式如下
代码块
void ConcurrentMarkSweepGeneration::init_initiating_occupancy(intx io, uintx tr) {
assert(io <= 100 && tr <= 100, "Check the arguments");
if (io >= 0) {
_initiating_occupancy = (double)io / 100.0;
} else {
_initiating_occupancy = ((100 - MinHeapFreeRatio) +
(double)(tr * MinHeapFreeRatio) / 100.0)
/ 100.0;
}
}
15.-Xmn512m 年轻代大小
16.-XX:SurvivorRatio=8 年轻代survivo区域的比例80%与eden区20%
年轻代分成1个Eden Space和2个Suvivor Space(命名为A和B)。当对象在堆创建时,将进入年轻代的Eden Space。垃圾回收器进行垃圾回收时,扫描Eden Space和A Suvivor Space,如果对象仍然存活,则复制到B Suvivor Space,如果B Suvivor Space已经满,则复制到Old Gen。同时,在扫描Suvivor Space时,如果对象已经经过了几次的扫描仍然存活,JVM认为其为一个持久化对象,则将其移到Old Gen。扫描完毕后,JVM将Eden Space和A Suvivor Space清空,然后交换A和B的角色(即下次垃圾回收时会扫描Eden Space和B Suvivor Space。这么做主要是为了减少内存碎片的产生。
17.-XX:PermSize=256m 非堆内存的初始值,即方法区、常量区,存储类信息等。
18.-XX:MaxPermSize=256m 非堆内存的最大值。
19.-XX:+HeapDumpOnOutOfMemoryError 内存溢出时dump堆信息。
20.-XX:ReservedCodeCacheSize=128m 代码编译时的缓存大小。
21.-XX:InitialCodeCacheSize=128m 代码编译时缓存初始化大小。
22.-Xms4g jvm的最小内存
23.-Xmx6g jvm的最大内存
理解JVM关键参数配置
本文介绍了JVM的常用参数,包括-Dfile.encoding、-XX:+PrintGCDetails、-XX:+UseConcMarkSweepGC等,涉及内存管理、垃圾收集、日志输出等方面,帮助优化Java应用性能。

被折叠的 条评论
为什么被折叠?



