首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Stop-The-World GC期间,是否会停止使用scheduleWithFixedDelay调度的java运行任务?

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

Stack Overflow用户
提问于 2013-09-13 09:58:06
回答 2查看 740关注 0票数 0

我想实现一个心跳机制,在这个机制中,子进程会定期ping父进程,告诉父进程它还活着。我用线程池的scheduleWithFixedDelay方法以这种方式实现了ping任务:

代码语言:javascript
复制
   pingService.scheduleWithFixedDelay(new PingGroomServer(umbilical,
          taskId), 0, pingPeriod, TimeUnit.MILLISECONDS);  

脐带血是RPC客户端到父进程吗?

是否可以使用固定延迟来调度scheduleWithFixedDelay?在Stop- the -World GC期间,ping线程是否会停止?实际上,我仍然怀念心跳,即使我等待了6* pingPeriod毫秒。

EN

回答 2

Stack Overflow用户

发布于 2013-09-13 14:14:00

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

  1. Go可预测,实时go。一种方法是基于RTSJ或其他实时Java实现的实时Java实现,如:http://fiji-systems.com/ http://www.aicas.com/ http://www-03.ibm.com/linux/realtime.html
  2. Go low #en0#,go no - stop-the-world GC。另一种方法是使用没有停止世界垃圾收集暂停的Java实现,比如来自Azul系统的Zing JVM,它使用低延迟并发收集器。http://www.azulsystems.com/solutions/low-latency/overview

由于上述选择对于小型应用程序来说可能是相当大的一步,因此您可以使用“经典”Java实现来做一些事情。

因此,如果您希望Oracle/OpenJDK JVM出现较短GC暂停,有一些经验法则:

  • 硬件-这是最重要的。您必须拥有一个具有快速多线程CPU和快速内存模块的SMP系统。避免交换。因此,硬件越快,垃圾收集器的执行速度就越快。
  • 使用多线程垃圾收集器。如果您使用的是Oracle JVM go collector)
  • Use G1或parallelGC (又称吞吐量和小堆),那么堆越大,就必须通过垃圾内存(垃圾collector.
  • Tune memory,堆)人机工程学来处理更多的空间。微调你的内存人体工程学,让对象在年轻一代被收集(而不是被提升到老一代),以避免完全的垃圾回收。

类似问题的另一个答案:Why will a full gc on small heap takes 5 seconds?

有关GC人体工程学的更多信息,请访问:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

票数 2
EN

Stack Overflow用户

发布于 2013-09-13 10:09:28

是的,stop- the -world就是它所说的那样--每个访问堆上的对象的线程都会被停止,而这些对象并不是专门与垃圾收集器相关的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18777074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档