1s延迟控制应用程序:这适用于Java吗?
|
在我的工作中,我们最近完成了控制应用程序的系统架构,其最大延迟大约为一到两秒.它分布在通过IP LAN进行通信的小型ARM片上盒中. 我们最初预见到我们会使用C或C,因为它是一种经典的控制系统语言.在讨论了如何实现应用程序之后,我们现在意识到C具有相当有限的库,缺乏内省,并且具有可能减慢开发的一些其他属性.我的同事随后建议Java可能会胜任这项工作. 我真的害怕为控制应用程序运行GC的延迟,我也不愿意放弃RAII,因为应用程序将使用大量外部资源(套接字,文件句柄,外部库等句柄等). pro / con列表目前如下: C++
+ RAII - Easy resource management - it will be a complex system
+ System language - speed if we cant't find a JIT VM for our ARM
+ No GC - no big worst case latencies from the GC
+ Easy to integrate with some shared mem libs that we have to interface with
- Fewer free as in beer libs
- Lacks introspection - Mapping classes to DB and external data formats (XML)
would benefit from this (ORM /JAXB) approach
- Easy to shoot one self in the foot - hard and expensive to find programmers
which don't make big mistakes
- Memory fragmentation - needs tuning and workarounds
Java
+ Huge amount of libs
+ Introspection - serialization becomes a breeze (see C++ section)
+ Easier to find 'good enough' programmers
- No RAII - Client has to remember finally or you leak
resources. IMO Java programmers tend to ignore this
problem unless they have server app background.
- No System Language - possibly slower although ARMj could alleviate this
- GC - latency might go up (don't know if parallel GC will work - seems that
you might get fragmentation,see note below).
- Need to write JNI for the shared mem libs that we interface with
- Maybe ORACLE will eat us
使用并行GC的内存碎片被提到in this AMD article 如果GC延迟不成问题,我很乐意使用Java,我们可以获得RAII.因此 所以,我的问题是:你有什么建议吗? Java是一个可行的选择,如果你可以选择任何语言,它会是什么? 解决方法GC仅用于从废弃对象中回收内存.丢弃非常少的资源,您将获得非常少,更短的GC.您可能会使用大量套接字,外部库中的句柄,但是您丢弃它们的速度有多快? 完整的GC旨在消除碎片.它通过复制所有内存来连续使用它.这就是为什么它很昂贵,所以如果延迟对你很重要,你想要最小化这些.也就是说,如果您的完整GC占用时间超过100毫秒,则会出现严重的性能问题.它不应该那么高. 恕我直言,我说你应该能够开发一个控制系统,其延迟远低于10毫秒,99%的时间. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 更好的JFileChooser替代OS X,Linux?
- 多线程 – std :: this_thread :: yield()用法?
- Java组件FileUpload上传文件实现代码
- 支持快速删除任何节点的Java链表?
- Java微信公众平台开发(3) 接收消息的分类及实体
- java – 了解managed beans / backing beans
- Java ExecutorService invokeAll()中断
- Java实现的utf8,gbk,unicode编码相互转换的代码
- 在Java中允许和接受hashCode和equals方法中的异常
- JSR 330的任何在线教程链接:Java的依赖注入?
