内容摘自Frequently Asked Questions About the Java HotSpot VM,地址是http://www.oracle.com/technetwork/java/hotspotfaq-138619.html
1.My application runs slowly. Why?
首先,我们理解cpu执行字节码的时间占总的程序执行时间的比例是很重要的,那种I/O Bound的程序,或者程序在执行native代码的时候,
JVM本身并没有消耗cpu时间,JVM虚拟机优化技术只针对优化执行字节码的时间。比较典型的反例是频繁 执行 native操作的图形程序,或者是
频繁发送接受网络数据包的I/O Bound程序,又或是读写数据库的程序。
我们假定JVM绝大部分时间都在执行字节码,并且确保VM是在正确的模式下,体积比较小和需要快速启动的程序可以使用-client选项,
需要全性能运行的程序需要使用-server选项。
如果上面的方法没有解决性能问题,可以查看一下JVM的详细参数列表 Java HotSpot VM Options ,同时也有很多工具帮助我们找到存在性能
问题的地方, jstat (Java Virtual Machine Statistics Monitoring Tool) and hprof (A Heap/CPU Profiling Tool)。
2.My program isn't scaling with the number of processors.
可扩展问题涉及到很多方面,首先你的程序可能不是以可扩展的方式编写的(比如代码里存在大量的同步互斥操作,或者是单线程),也可能是你的
程序使用了不可扩展的操作系统资源,最后如果是多线程程序,垃圾回收器将会是程序可随cpu核数扩展的障碍。
更多的关于GC scalability的信息, see Frequently Asked Questions About Garbage Collection in the Java HotSpot VM and Tuning Garbage Collection with the 5.0 Java Virtual Machine .
VM使用的线程模型也可能是一个问题. 更多的关于threading model scalability的信息, see Java and Solaris Threads Document
3.How many processors will the HotSpot VM scale to?
有很多因素限制了程序对cpu核数的可扩展能力,在cpu核数很多的情况下,垃圾收集经常是一个瓶颈。可扩展能力对我们的开发小组来说是优先级最高的。现在我们只有以可扩展的方式编写程序,然后观察程序在多cpu系统上的吞吐量改善情况。
4.Benchmarking the Java HotSpot VM
待续...