军工,即军事工业,是工业领域的一个分支。工业控制,必然是C/C++的主战场。工业控制,讲究的是极高的稳定性,稳定压倒一切。同时,还讲究实时性。在控制过程中,一旦出现不稳定或大的延时,后果可能就是致命的。军工,那要求更加严格,简直就是性命攸关!
游戏有时也有类似的特点,但是出现问题,大不了就输一局比赛,损失一件高端游戏装备,这与军工的损失完全不在一个重量级。
而Java广泛用于应用级开发,特别是web平台和手机app。哪怕是在线支付,对于稳定性和实时性的要求也没有那么高。经常我们遇到服务不可用之类的错误,“请刷新重试”。关系不大,多刷新几下就好了嘛。事务机制基本能保证不会乱扣钱,但是保证不了一次性成功以及高度的实时性。
而在工业控制中,关键操作可不敢“刷新重试”。在类似驾驶的控制中,关键指令延迟0.1秒可能都是致命的。
说了这么多,这与C/C++和Java有什么关系的?
两者最大的区别就是:Java是带虚拟机的,是带垃圾回收的,而C/C++不带。垃圾回收往往是不可控的,不知道什么时候就执行了垃圾回收,这个时间可能很短,也可能很长。在垃圾回收时,就会带来卡顿。Java虽然也有运行时编译、“预热”机制,但都是难以控制的,具有不确定性。说的直白点,你把一切希望都寄托到了Java虚拟机(JVM)。而对于工业控制,尤其是军工,肯定尽量要求一切要尽在掌控中。
对于要求最高的控制场景,那都不能用windows或常规Linux,因为它们是分