我正在做一些阅读,发现当 GC 以“停止和复制”策略或任何其他策略发生时,程序执行会正确停止以进行有效的 GC。这给我带来了一个问题,当垃圾收集发生时GC停止程序执行而无法控制时,如何确保java应用程序的性能?

假设我们有几个线程在运行,其中一个线程正在处理一个非常关键的性能 Activity ,这需要毫秒级的精度,那一刻我可以依靠我的 Java 应用程序,如果在如此关键的时间调用 GC 会发生什么,是吗?不影响性能,有什么方法可以确保在代码中的特定时间不调用 GC?

最佳答案

您有多种选择

  • 使用小的年轻代大小。这可以在几毫秒内收集到,有时不到 1 毫秒。
  • 使用大的伊甸园空间并减少垃圾。如果您平均创建的速度低于 300 KB/s,并且您拥有 24 GB 的 Eden 空间,那么您可以运行一整天,甚至没有一个小集合。

  • 虽然并非所有库都设计为低 GC,但您仍然可以使用它们,前提是它们不经常被调用。对于关键路径库,您希望它们是低垃圾。这不仅减少了暂停时间,而且有时将暂停之间的代码速度提高了 2-5 倍。

    关于java - 在垃圾回收发生时没有控制的情况下,如何保证java应用的性能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36507486/

    10-12 04:15