gc
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps : 打印每次GC的发生时间
-XX:+PrintTenuringDistribution : 察看新生对象晋升老年代的实际阈值
-XX:+PrintHeapAtGC : 每次GC打印堆的使用情况
-XX:+PrintGCApplicationStoppedTime : 显示应用程序在GC发生时的停顿时间
-XX:+PrintGCApplicationConcurrentTime : 应用程序在GC停顿时间的执行时间
-Xloggc:C:\gc.log : GC日志
5) 类和对象跟踪
-XX:+TraceClassLoading : 跟踪类加载情况
-XX:+TraceClassUnloading : 跟踪类的卸载情况
-verbose:class : 跟踪类的加载和卸载情况
-XX:+PrintClassHistogram : 当按下Ctrl + Break,输出系统内类的统计信息
6) 控制GC
-XX:DisableExplicitGC : 禁止显示GC操作,避免程序员大量使用System.gc()降低程序性能
-Xnoclassgc : 禁止回收类(class,而不是对象实例)
7) 选择类校验器
-XX:-UseSplitVerifier :实用旧的类校验器,JDK1.6默认开启新的类校验器
-XX:-FailOverToOldVerifier : 关闭再次校验功能, 默认新的校验器失败会再次使用老的校验器
8) Solaris下线程控制
-XX:+UseBoundThreads : 绑定所有用户线程到内核线程,减少线程进入饥饿状态的次数
-XX:+UseLWPSychronization : 使用内核线程代替线程同步
-XX:+UseVMInterruptibleIO : 允许运行时中断线程
9) 使用大页
-XX:+UseLargePages : 启用大页
-XX:LargePageSizeInBytes : 指定大页的大小
10) 压缩指针
-XX:+UseCompressedOops : 打开指针压缩,压缩class的属性指针(静态成员),对象的属性指针,普通对象的每个元素指针, 能节省内存,但是会消耗一定的性能
5.6 实战JVM调优
1) Tomcat简介与启动加速 : 减少GC次数,扩大新生代,禁止显示调用GC
2) 一个示例web : 每个用户分配1m空间
3) JMEter介绍和使用 : 基于java的性能测试和压力测试工具,生成包括响应时间,错误数和吞吐量的报告
4) 调优前Web应用运行状况 : GC过多,吞吐量为38.7/s
5) 调优过程 : 确定堆内存大小,合理分配新生代和老年代,确定永久区大小,选择垃圾收集器,对垃圾收集器设置,禁用显示gc,进用类元数据回收,禁用类验证等
设置堆空间和永久区,禁用显示gc,去掉类验证,吞吐量为47.9/s
-Xmx512M(-Xmx256M)
-Xms512M
-XX:permSize=32M
-XX:MaxPermSize=32M
-XX:+DisableExplicitGC
-Xverify:none
使用并行回收收集器,吞吐量为51/s
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:ParallelGCThreads=8
6 Java性能调优工具
6.1 Linux命令行工具
1) top : 显示系统中各个进程的资源占用状况
2) sar : 周期性对内存,I/O和CPU情况采样