在停止World GC期间,是否会停止使用scheduleWithFixedDelay调度的java运行任务?

在停止World GC期间,是否会停止使用scheduleWithFixedDelay调度的java运行任务?,java,garbage-collection,schedule,Java,Garbage Collection,Schedule,我想实现一种心跳机制,在这种机制中,子进程将定期ping父进程,以告知父进程它仍然处于活动状态。我使用threadPool的scheduleWithFixedDelay方法以以下方式实现ping任务: pingService.scheduleWithFixedDelay(new PingGroomServer(umbilical, taskId), 0, pingPeriod, TimeUnit.MILLISECONDS); RPC客户端到父进程是什么 具有固定延

我想实现一种心跳机制,在这种机制中,子进程将定期ping父进程,以告知父进程它仍然处于活动状态。我使用threadPool的scheduleWithFixedDelay方法以以下方式实现ping任务:

   pingService.scheduleWithFixedDelay(new PingGroomServer(umbilical,
          taskId), 0, pingPeriod, TimeUnit.MILLISECONDS);  
RPC客户端到父进程是什么

具有固定延迟的scheduleWithFixedDelay是否可以具有固定延迟?在停止World GC期间,ping线程是否会停止?
实际上,即使在我等待6*ping周期ms之后,我仍然错过了心跳。

是的,停止世界就是它所说的那样-访问堆上没有特别涉及垃圾收集器的对象的每个线程都被停止


如果您想要java中的心跳信号,最好将其分给一个单独的VM,该VM只运行该代码,这样VM暂停就不会太长。或者更好的是,不要依赖毫秒计时-你不能假设桌面操作系统中进程之间的调度级别。

是的,停止世界就是它所说的那样-访问堆上与垃圾收集器无关的对象的每个线程都被停止


如果您想要java中的心跳信号,最好将其分给一个单独的VM,该VM只运行该代码,这样VM暂停就不会太长。或者更好的是,不要依赖毫秒计时-您不能假设桌面操作系统中进程之间的调度级别。

因此,在您的应用程序中有几种更确定的运行时选择(Gc暂停、线程调度等)

  • 去预测,去实时。一种方法是基于RTSJ或其他实时Java实现,如:
  • 去低延迟,去不停止世界GC。另一种方法是使用Java实现,无需停止垃圾收集暂停,就像Azul系统的Zing JVM使用低延迟并发收集器一样。
  • 由于上述选择对于小型应用程序来说可能是一个相当大的步骤,因此您可以使用“经典”Java实现来完成一些事情

    因此,如果您想在Oracle/OpenJDK JVM中使用短GC暂停,有一些经验法则:

    • 硬件-这是最重要的。您必须有一个具有快速多线程CPU和快速内存模块的SMP系统。避免交换。因此,您拥有的硬件越快,垃圾收集器的执行速度就越快
    • 使用多线程垃圾收集器。如果您使用的是Oracle JVM,请选择G1或parallelGC(也称吞吐量收集器)
    • 使用小堆,堆越大,垃圾收集器必须处理的空间就越多
    • 调整内存(堆)人体工程学。微调内存人体工程学,让对象在年轻一代收集(而不是提升到老一代),以避免完全的垃圾收集
    类似问题的另一个答案是:

    有关GC工效学的更多信息:

    因此,在应用程序中有多种选择可用于更具确定性的运行时(Gc暂停、线程退出等)

  • 去预测,去实时。一种方法是基于RTSJ或其他实时Java实现,如:
  • 去低延迟,去不停止世界GC。另一种方法是使用Java实现,无需停止垃圾收集暂停,就像Azul系统的Zing JVM使用低延迟并发收集器一样。
  • 由于上述选择对于小型应用程序来说可能是一个相当大的步骤,因此您可以使用“经典”Java实现来完成一些事情

    因此,如果您想在Oracle/OpenJDK JVM中使用短GC暂停,有一些经验法则:

    • 硬件-这是最重要的。您必须有一个具有快速多线程CPU和快速内存模块的SMP系统。避免交换。因此,您拥有的硬件越快,垃圾收集器的执行速度就越快
    • 使用多线程垃圾收集器。如果您使用的是Oracle JVM,请选择G1或parallelGC(也称吞吐量收集器)
    • 使用小堆,堆越大,垃圾收集器必须处理的空间就越多
    • 调整内存(堆)人体工程学。微调内存人体工程学,让对象在年轻一代收集(而不是提升到老一代),以避免完全的垃圾收集
    类似问题的另一个答案是:

    有关GC工效学的更多信息:

    是的,停止世界GC确实“停止世界”。即使没有它,我认为这些计时器也不能完全保证准时开火(只是不能在时间之前)。这是个糟糕的问题。不够详细。你错过了所有的心跳还是某些时候?您是否运行了-verbose:gc和一些日志记录,丢失的ping和gc之间是否存在相关性?是的,停止世界gc确实“停止世界”。即使没有它,我认为这些计时器也不能完全保证准时开火(只是不能在时间之前)。这是个糟糕的问题。不够详细。你错过了所有的心跳还是某些时候?您是否运行了-verbose:gc和一些日志记录,丢失的ping和gc之间的相关性如何?