1.jvm调优标志
-XX:+FlagName表示开启,-XX:-FlagName表示关闭
全面的性能调优
1.编写更好的算法
2.编写更少的代码
性能测试的原则:
1.微基准测试
2.理解批处理流逝时间,吞吐量和响应时间
如果CPU使用率上升,就需要参考性能分析信息,弄清楚是什么花费了这么多时间,如果GC时间变长,就该查阅堆性能分析信息,搞明白是什么消耗了这么多的内存,如果CPU和GC时间都减少,某些地方的竞争可鞥你降低了性能, 栈数据可以指示特定的同步瓶颈
用户态时间就是CPU执行应用代码所占的时间的百分比,系统态时间就是执行内核代码时间的百分比
iostat -xm 5
%system% 表示进程的百分之三的时间都在等待磁盘.
w_await 用时时间表示队列的长度, wMB/S 表示每秒写入多少数据
对于长时间运行的应用来说,应该一直使用server编译器,最好配合分层编译器
如果堆内存小于3G,那么使用32位的JVM是比较好的。因为JVM内部的指针只有32位,操作32位指针要少于64位的.
对于32位的window机器来说启动时间是重要的而对于64位的Unix的系统来说更关注长期运行的性能。
编译器中级调优其实就是为目标机器上的Java选择正确的jvm和编译器开关,
-client -sever 分层,其中分层编译通常是长期运行应用的最佳选择.
调优代码缓存
JVM比那一代码时,会在代码缓存中保留编译之后的汇编语言指令集.
java执行某个方法时,会检查该方法的两种计数器的总数,然后判定该方法是否适合编译.
-XX:CompileThreshold=10000 1500 标志触发