Java很稳定,是不是一句谎言?

体娱   2024-08-23 20:00   山东  

我读过一些关于JVM的书,特别是周志明那本-《深入理解JVM》,读了很多次,每次都有收获!
这本书让我认识到一个道理,Java其实就像小姑娘的头发,你想要什么发型,你给她梳一个就是。

如果你想看看Java的如何溢出,你只要写一个程序不断的申请内存,而且不释放就可以了。内存不停增加,Java程序就会崩溃,并且给出出错信息。如果运行的时候,给Java添加了运行参数,还可以观看Java GC的救火过程,从而了解GC的过程。

所以说,Java的稳定性,除了Java自身,还有程序方面的决定因素。

如果有一个Objec虽然没有用了,但是他和Root Object总是存在连接,那么系统就不会回收。如果还不停的创建这样的Object,Java程序占用的内存就会不断增加,最终就像一个黑洞一样,导致系统的崩溃。

这是Java程序不稳定的一个原因!

另外一个事情,是关于国产某X康的打卡机。

这种打卡系统提高了Java SDK,同时还有C++和C#的SDK。最先的选择是Java,但是运行一段时间之后发现,总是丢数据,有的人明明来上班了,还且在打卡机前面打了卡,但是总是没有数据。这种情况造成的后果就是,有的人甚至都和打卡机来个合影,以方便有一天自证清白。

当时,读取打卡数据的程序就是Java。

后来,把打卡程序进行了改写,改为C#。运行方式也作了改变,从原来的SpringBoot定时运行,改为Windows的定时任务,运行C#。

出人意料的是,居然没有出现丢失数据的情况了。

这个情况,很让人疑惑。一方面考虑是Java和打卡机的接口出现了问题。因为打卡机器原生还是C/C+打底。如果Java和JNI接口出现问题,就容易出现数据丢失。另外一个考虑是SpringBoot的定时接口有问题,Java代码没有执行;最后一个考虑是SpringBoot的长时间运行,JVM出现运行错误,导致程序出错。

虽然最后也没有查明白,因为用C#改写了之后,就没有出现过“丢失数据”的情况。

第三个时期,是有些特定程序的问题。

我们有一台WebLogic服务器,他是PLM软件的运行平台。

近期,Oracle就JDK进行公司严查,如果使用了超过221的JDK8,就会按照公司人数来收取安装费用。

针对这种情况,我们就对WebLogic的基础平台进行了改变,从原来的Oracle官方的Java11改变为OpenJdk11。

改变之前,其实是充满信心的。因为OpenJDK就是Oracle JDK11的非官方实现,基础代码相同,但是去掉了Oracle JDK的私有组件,从而不受Oracle版权政策的影响。

基于上面的考虑,我们转换到了OpenJDK。

但是事情并没有那么顺利。

我们发现,WebLogic里面的PLM下午就会出现错误,容易出现客户端窗口空空的情况,没错,就是一个什么也没有的窗口。后台的Console也报错。

这种情况持续了一个星期的时间。

为了应对这种情况,每天早上都需要重启服务器,当时依然撑不过全天,下午还是报错。

不胜其烦的我们,把JDK替换回去。

神奇的事情发生了,WebLogic正常了。

从这里可以看到,Oracle JDK和Oracle WebLogic是配合更好。

总结一下:

1、Java程序决定程序的稳定性,JDK只是平台。程序写的不好,JDK也没办法。

2、Java和外部sdk交互,未必契合性很好。

3、大型Java程序,特别是Oracle自家的产品,Oracle JDK更佳。

我是明月,

天天研究Linux和Java!

明月三千
将进酒,杯莫停。与君歌一曲,请君为我倾耳听。荔枝成为linux大师!
 最新文章