为嵌入式流设备选择JVM

时间:2018-09-06 14:38:17

标签: java raspberry-pi garbage-collection jvm streaming

我们正在开发一种基本上是树莓派的设备,它可以以给定的帧速率读取文件数据,对其进行处理并将数据从USB设备中流出来。

由于所使用功能的性质,我们无法完全消除垃圾分配,即使是较小的年轻一代GC,GC暂停也会导致跳帧。

现在我们正在使用HotSpot JVM,但我的理解是它更适合大堆大小,我们的内存需求很少超过256mb,所以我想知道是否有更好的VM带有垃圾回收功能,可以使我们在Raspberry Pi上停留不到15毫秒?

2 个答案:

答案 0 :(得分:2)

我认为您真的会为此感到困扰。您没有提供用于启动JVM的标志,因此无法推荐替代方案。

一个配置良好的G1收集器,其应用程序不会生成持续增长的长寿命对象,这将避免世俗的完整GC。但是,您的问题是,即使是次要的GC(通常非常快)也会导致不可接受的延迟。问题的部分原因是Pi上的内存总线的速度并没有那么大。

我们(我为之工作的Azul)生产了一个不间断的收集器(C4),但这是为具有更多资源的机器设计的。它至少需要1Gb RAM,并使用多个内核与应用程序线程同时处理GC。

答案 1 :(得分:2)

最终,我们已经决定要努力使应用程序执行它实际上不是为构建而来的,或者至少不值得继续沿这条路开发。

我们当前的解决方案是将应用程序保持原样,并在垃圾回收暂停的现实中生活,这样我们就不会因为疯狂的优化而阻碍应用程序的未来开发。让Java做它打算做的事情。

为了停止导致跳帧的暂停,我们选择创建第二个微小的缓冲区应用程序,由主应用程序通过IPC管理。