您的位置:首页 > 编程语言 > Java开发

Java开发者应当理解的专业术语

2016-08-17 18:16 267 查看

Java开发者应当理解的专业术语

本文将和你分享一些
JVM
“专业术语”,程序员在对
JVM
做任何的性能和垃圾回收调整之前理解和记住这些“专业术语”是非常重要的。在文章的最后还提供一些小技巧,包括一些高性能微调的最佳实践。关于
Oracle HotSpot
的并发垃圾回收器,例如
CMS
G1
的进一步建议将在后续文章中探讨。 在深入阅读之前,我建议你先熟悉《JVM
详细 GC 输出日志》。获得这个
JVM
数据分析技能是至关重要的,特别是当与更加复杂的
APM
技术结合使用的时候。

JVM 专业术语

分配率(Allocation Rate) Java 对象被分配到年轻代内存空间,又名 “短暂的”对象
转换率(Promotion Rate) Java 对象从年轻代转移到年老代
存活数据(LIVE Data) 被分配在年老代内存空间的 Java 对象,又名 “长寿”对象
暂停应用程序运行进行垃圾回收(Stop-the-world Collection) 垃圾回收,例如完全垃圾回收,造成你的应用程序线程短暂性挂起直到垃圾回收完成

第一件事情:JVM 垃圾回收日志

提供有关 Java 堆栈和垃圾回收活动黑盒内的详细细节
使用工具,例如
GCMV(垃圾回收内存可视化),用于评估
JVM
暂停时间和内存分配率,以及可以手工调整代内存大小(译者注:这里的“代”指
JVM
中的年轻代,年老代以及永久代)。





分配和转换率

跟踪程序的分配率和转换率对于垃圾回收性能优化是非常重要的。
GCAdaptiveSizePolicy
参数是
JVM
不可分割的一部分,保持该参数有效。仅在必要时手动调整。







存活数据计算

一次完全垃圾回收之后应用程序依旧存活的数据被分配到年老代。
你的年老代容量要足够大是至关重要的,为了能够轻易容纳你的应用程序存活数据,也为了能够限制应用程序主要垃圾回收的频率,还为了能够减轻对应用程序负载吞吐量的影响。

建议:刚开始,调整 Java 堆大小,以达到一次完全垃圾回收之后年老代占用或者大约占用 50% 的内存,使得高负载情况(故障转移,高峰,业务繁忙时段)能够提供做够大的缓存。

要点:注意年老代的内存溢出!
在 Java 中什么是内存溢出?随着时间的推移存活数据不断增加……





深入存活数据

JVM
的垃圾回收日志很棒……但是你如何检查你的存活数据呢?
Java
堆直方图快照和堆转储分析是强大而成熟的方法,能够更好地了解您的应用程序的存活数据。
Java
剖析解决方案和工具,例如
Oracle Java Mission Control,Java Visual VM 为 Java 堆的检查和分析提供了高级特性,包括应用程序内存分配的跟踪。



Stop-the-world Collections: GC Overhead

年轻代垃圾回收性能消耗低,但是要注意不要超过分配率
建议初始分配年轻代大小(
JVM
默认大小)为堆大小的 1/3
记住:年轻代和年老代垃圾回收两者都需要停止程序运行的时间。
永久代和元空间(JDK 1.8+)在完全垃圾回收时进行,因此跟踪类元数据和垃圾回收的频率是非常重要的。







最后的话语和建议

最佳实践

最佳实践

优化
Java
性能不只是关于
Java
……探索各个角度。
始终依靠事实,而不是猜测。
首要集中注意力在全局微调而不是过早的细粒度优化。
适当时进行性能测试和负载测试。
利用可用的可靠工具和故障排除技巧。

避免

可能有几十个
JVM
参数,不要过度调整你的
JVM

你总是怕你不明白的东西:良好的应用知识 > 无惧 > 更好的优化建议。
不要假设你的应用程序的性能是最佳的。
不要试图一次性解决所有问题,逐步实现调整。
不要混淆并专注于导致性能问题的根源而不是症状。
过多试错法:猜测症状。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: