实时Java,第4部分 - 实时垃圾收集 - 编程入门网
失对存储的跟踪或在两部分扫描之间错过,在堆中产生一个悬空指针。应用程序开发人员应该意识到栈应自动进行扫描并且应避免在 RT 应用程序中使用很深的栈。
模糊屏障。虽然栈必须自动进行扫描,但是如果在单个时间量期间所有栈都被扫描,则可能难以保持确定性。GC 和 JVM 可以在扫描 Java 栈的同时交错执行。这可能导致通过一系列加载和存储将对象从一个线程移动到另一个线程。为了避免丢失对象的引用,GC 期间未被扫描过的线程让屏障跟踪重写值和存储的值。跟踪存储的对象,应将其存储在已经处理过的对象中并从栈中弹出,通过写入屏障保持可获取性。 实时Java,第4部分 - 实时垃圾收集(7)时间:2011-06-22 Benjamin Biron Rya调整 Metronome 了解堆大小和应用程序利用率方面的关系非常重要。虽然高目标的利用率对于实现最佳应用程序吞吐量很有帮助,但是 GC 必须能够跟上应用程序的分配率。如果目标利用率和分配率都很高,则应用程序可能耗尽内存,强迫 GC 连续地运行并且在多数情况下使利用率降低到 0%。这种降低带来了大量的暂停时间,通常对 RT 应用程序来说不可接收。如果遇到这种情形,必须作出选择来降低目标利用率,以便提供更多的 GC 时间,增加堆大小以支持更多的应用程序,或将此二者结合使用。某些情形可能需要使用内存以维持确定的目标利用率,因此在性能开销上降低目标利用率是惟一选择。 图 8 演示了一种典型的堆大小和应用程序利用率之间的平衡。更高的利用率百分比需要更大的堆,因为有些堆在低利用率的应用程序中允许运行,而在 GC 中则不允许运行。 图 8. 堆大小和利用率的对比 利用率和堆大小之间的关系跟应用程序有很大关系,达到一个大致平衡需要使用应用程序和 VM 参数反复实验。 冗余 GC 冗余 GC 是一种记录 GC 活动并将其输出到一个文件或屏幕中的工具。您可以使用它来确定参数(堆大小、目标利用率、窗口大小和时间量)是否支持应用程序运行。清单 1 演示了一个冗余输出的例子: 清单 1. 冗余 GC 示例
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |