我想实现一个心跳机制,在这个机制中,子进程会定期ping父进程,告诉父进程它还活着。我用线程池的scheduleWithFixedDelay方法以这种方式实现了ping任务:
pingService.scheduleWithFixedDelay(new PingGroomServer(umbilical,
taskId), 0, pingPeriod, TimeUnit.MILLISECONDS); 脐带血是RPC客户端到父进程吗?
是否可以使用固定延迟来调度scheduleWithFixedDelay?在Stop- the -World GC期间,ping线程是否会停止?实际上,我仍然怀念心跳,即使我等待了6* pingPeriod毫秒。
发布于 2013-09-13 14:14:00
因此,对于应用程序中更具确定性运行时(Gc暂停、线程调度等),有几种选择
由于上述选择对于小型应用程序来说可能是相当大的一步,因此您可以使用“经典”Java实现来做一些事情。
因此,如果您希望Oracle/OpenJDK JVM出现较短GC暂停,有一些经验法则:
类似问题的另一个答案:Why will a full gc on small heap takes 5 seconds?
有关GC人体工程学的更多信息,请访问:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
发布于 2013-09-13 10:09:28
是的,stop- the -world就是它所说的那样--每个访问堆上的对象的线程都会被停止,而这些对象并不是专门与垃圾收集器相关的。
如果你想要java的心跳,最好的办法是让一个单独的VM运行那些代码,这样VM的暂停时间就不会太长。或者更好的是,不要依赖于毫秒级的计时-你不能假设桌面操作系统中进程之间的调度级别。
https://stackoverflow.com/questions/18777074
复制相似问题