一步步优化JVM七:其他
边缘问题
在某些场景下,按照前面的一步步优化指导无法产生效果。这一节说明一下这些情况。
一些应用分配了一些少量的非常大的长时间存活的对象。这样的场景需要需要young代的空间比old代更大。
一些应用会经历很少的对象转移。这样的场景可能需要old代的空间远远大于存活对象的大小,由于old的占用量增长率很小。
一些应用有小延迟需求,会使用CMS垃圾回收器,而且使用小young代空间(以致于MinorGC时间更短),以及大的old代空间。在这种配置下,对象会快速的从young代移动到old代,替代了高效老化对象。另外,CMS垃圾回收移动后的对象,碎片的可能性通过大的old代空间来解决。
下一节介绍一些其他的HotSpot VM选项来提升应用的性能。
其他一些的性能命令行选项
几个可选的前面有提到的命令选项可以用来提升Java应用的延迟和吞吐量性能,这些选项是通过JIT编译器代码优化以及其他的HotSpot VM优化能力。下面介绍这些特性以及相适应的命令选项。
最新和最大优化 当新的性能优化集成到HotSpot VM中之后,可以通过-XX:+AggressiveOpts选项来启用。
通过选项来引入新的优化,可以把最新及最大的优化和以及经过长时间使用证明是稳定的优化分离开。应用通常更希望获得更好的稳定性,毕竟最新的优化可能会导致未知的问题。但是如果应用需要提升任何可以提升的性能优化的时候,可以使用命令选项来启用这些优化。
当新的优化被证明是稳定的之后,他们会被默认使用,也许需要升级几个版本之后才会变成默认。
使用-XX:+AggressiveOpts命令选项之后,需要考虑到性能的提升,同样也需要考虑到性能提升所带来的不稳定风险。
逃避分析
逃避分析是一个种分析Java对象范围的技术,在特殊情况下,一个线程分配的对象可能被另外一个线程使用,这个对象就叫着“逃避”。如果对象没有逃避,额外的优化技术可以应用,因此,这种优化技术叫做逃避分析。
在HotSpot VM里面的逃避分析优化可以通过命令行选项:
$ java -server -Xmx1024m -Xms1024m -Xmn256m -XX:+UseLargePages ...如果大页没有被合理设置,HotSpot VM同样会接受-XX:+UseLargePages是一个有效的选项,不过会报告无法获取大页,而且会退回操作系统的默认页大小。