易商讯
当前位置: 首页 » 资讯 » 生活 » 正文

为什么军工行业不用java,而是选择继续用c++?

放大字体  缩小字体 发布日期:2023-05-21 12:17:27
导读

优质回答:军工,即军事工业,是工业领域的一个分支。工业控制,必然是C/C++的主战场。工业控制,讲究的是极高的稳定性,稳定压倒一切。同时,还讲究实时性。在控制过程中,一旦出现不稳定或大的延时,后果可能就是致命的。军工,那要求更加严格,简直就是性命攸关!游戏有时也有类似的特点,但是出现问题,大不了就输一局比赛,损失一件高端游戏装备,这与军工的损失完全不在一个重量级。而Java广泛用于应用级开发,特别

优质回答:

军工,即军事工业,是工业领域的一个分支。工业控制,必然是C/C++的主战场。工业控制,讲究的是极高的稳定性,稳定压倒一切。同时,还讲究实时性。在控制过程中,一旦出现不稳定或大的延时,后果可能就是致命的。军工,那要求更加严格,简直就是性命攸关!

游戏有时也有类似的特点,但是出现问题,大不了就输一局比赛,损失一件高端游戏装备,这与军工的损失完全不在一个重量级。

而Java广泛用于应用级开发,特别是web平台和手机app。哪怕是在线支付,对于稳定性和实时性的要求也没有那么高。经常我们遇到服务不可用之类的错误,“请刷新重试”。关系不大,多刷新几下就好了嘛。事务机制基本能保证不会乱扣钱,但是保证不了一次性成功以及高度的实时性。

而在工业控制中,关键操作可不敢“刷新重试”。在类似驾驶的控制中,关键指令延迟0.1秒可能都是致命的。

说了这么多,这与C/C++和Java有什么关系的?

两者最大的区别就是:Java是带虚拟机的,是带垃圾回收的,而C/C++不带。垃圾回收往往是不可控的,不知道什么时候就执行了垃圾回收,这个时间可能很短,也可能很长。在垃圾回收时,就会带来卡顿。Java虽然也有运行时编译、“预热”机制,但都是难以控制的,具有不确定性。说的直白点,你把一切希望都寄托到了Java虚拟机(JVM)。而对于工业控制,尤其是军工,肯定尽量要求一切要尽在掌控中。

对于要求最高的控制场景,那都不能用windows或常规Linux,因为它们是分时系统,是多任务的,是非实时的。这时候,可能最简单的才是最可靠的。单任务、单进程、单线程,去除一切用不到的功能。连声卡、显卡、网卡、硬盘/SD卡,都不是必需的。甚至更夸张一点,连操作系统都没有!

windows、普通的Linux,能做到10毫秒的精度。定制的嵌入式系统,能做到毫秒级的精度。而高度优化的,不带操作系统的板子,甚至可以做到微秒级别的实时控制。

注意一下,光在真空中1微秒只传输300米。最极端的,最快的控制是最原始的机械紧急停止按钮。它的延迟恰好就是光在线路中的传输时间。所以大家就能明白,为什么越简单越可靠越快。

有了这些基础,大家就能明白,在非常“低级”的系统中,只有汇编和C可以运行起来,虚拟机和解释器是跑不动的。就算跑起来,也是很慢的,很消耗资源的。

Java,其底层就是用C语言写的。大家若不相信,请马上去阅读Java源代码中有关压缩、JPG图像、科学运算(sin、cos、log、pow等)的部分。另外虚拟机也是用C写的。所以理论上来说,只要是Java能做到的,特别是性能方面,C语言都可以做到。

对于业务系统,Java是非常合适的,开发效率高,生态系统好。但是对于军工,开发效率要让位于执行效率以及可靠性、实时性、低功耗。人们愿意花费更多的研发时间去开发这样的系统,哪怕是重复造轮子也在所不辞,因为这是性命攸关的,有时甚至是不计成本的。

其他网友观点

某语言天天喊着人多势众就觉得要一统天下了。其实某语言只在单位的审批流,电商这些这些请求延迟应用需求是几秒级别的应用场景。对于实时性要求高,可靠性要求高的环境。某语言基本绝迹。这表现在车床控制,武器控制,医疗设备,甚至绝大多数3D游戏。某语言基本是绝迹的。

其他网友观点

因为军工里电子工程的东西很多,这种嵌入式开发,好像c++更合适吧

其他网友观点

首先是安全问题。

Java是一个庞大的生态。在jvm(java的运行虚拟机)这个大基础之上还有无数框架、中间件。比如springboot、kafka等等。这里面99%的代码贡献者都是老外。庞大的代码量和复杂的设计体系使得即使开源的项目,要隐藏一些后门都是极为容易的事情。与之相反,想要找出这些后门难如登天(做过软件开发的人就知道,自己亲手写的代码,项目一旦变得庞大,想要找出特定场景才出现的BUG有多难)。开源的项目的风险都不可控,不开源的部分就更不用讲了。因此,Java生态体系无法达到军工要求的安全级别,项目中每一个第三方都可能成为风险源。Jvm能不能保证安全都还是一个巨大的问题。

其次是稳定性问题。

得益于Java生态的完善,有大量的框架的组件可以使用,就使得在Java上做任何项目,程序员第一件事就是想找有无可用的现成框架或者组件,自己动手写一些复杂的算法必要性越来越低,底层能力越来越差,至少90%的java程序员是胶水程序员,负责组合各种第三方,然后做一些简单的业务逻辑。第三方的框架和组件的代码质量和可靠性无法评估。大量使用框架带来的问题就是臃肿,框架为了追求更广泛的适用性,会做很多兼容和妥协。极端情况下C++的程序只要几KB大小就能实现的功能,java得带上Jvm不说,打包个就可能几十MB。套用一句真理:代码量越大,稳定性越差。

再次是C++的优点。

C++可以开发最低层的应用,例如直接和硬件打交道的驱动,几乎没有不可以实现的功能。用C++做开发最大的问题是,可以用的现成东西比较少,凡是想要做啥功能都要自己动手。开发界有一句古话“不要重复造轮子”,但是C++就是造轮子的工具,所以用C++开发就得自己造轮子。相当于工业母机床,想造什么都根据需要来实现。从国家安全的角度考虑,军工信息化应该有自己的一套生态。这一套生态环境应该是封闭的,由军工人一代一代累积下来的。

综上,个人认为,军工不可能淘汰C++,随着军工信息化生态的完善,被淘汰的更有可能是Java。当然,这个过程最难的就是人材的培养,越封闭的系统,人材越难得。

其他网友观点

眼看敌人打过来了,你还在STW。

其他网友观点

jvm会自动GC回收,引起短暂的挂起,c++内存是编码自己控制的,不会存在这种情况,军工类对实时要求极高,不允许有误差,这是一个原因。还有系统底层一般会用C语言,这也是一个原因

其他网友观点

C++才是计算机高级语言终极形态,其他都是为了简化人的使用难度,降低了下来的。太难太抽象的语言,不适合一般人学习使用。C++的各种开发包和架构也都是按人使用方便构建桥梁。

其他网友观点

真想不通整天喊着这语言好,那个语言不行,这个比那个好,能这么认为的人实在是太low了。语言没有好与不好,只有适合不适合某个运用场景。

其他网友观点

军工需要性能,不需要跨平台

其他网友观点

有些东西 性能优先


声明:易商讯尊重创作版权。本文信息搜集、整理自互联网,若有来源标记错误或侵犯您的合法权益,请联系我们。我们将及时纠正并删除相关讯息,非常感谢!

 
(文/小编)
免责声明
• 
本文为什么军工行业不用java,而是选择继续用c++?链接:http://www.esxun.cn/news/162162.html 。本文仅代表作者个人观点,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们,我们将在24小时内处理完毕。如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
 

Copyright © www.esxun.cn 易商讯ALL Right Reserved


冀ICP备2023038169号-3