请教一下, Java 在程序中调用第三方包时如何防止第三方包出错导致 jvm 崩溃导致整个程序停止运行

2020-08-21 11:27:52 +08:00
 muyiluop

比如调用的第三方包使用了 JNA 调用动态库,结果因为内存异常直接把进程终止了,导致整个程序崩溃。 还有一种情况就是,加入第三方包在代码中直接写 System.exit() 导致的程序退出。

我现在能想到的解决办法就是把第三方的包单独拿出去,写一个程序专门调用,然后整个程序再跟我的主要业务处理程序通过 socket 通信。想请教有没有其他更好的方法。

1043 次点击
所在节点    问与答
7 条回复
Cbdy
2020-08-21 11:51:53 +08:00
如果可以的话,用第三方代码之前审查一下对方代码。
不然就整成微服务吧。
opengps
2020-08-21 11:52:54 +08:00
用子线程执行,他不能退出你主线程吧?
我对第三方库的调用,习惯带上 try 包裹预料之外的问题
Jooooooooo
2020-08-21 11:59:06 +08:00
读一下代码再把代码跑在自己的服务里
Jooooooooo
2020-08-21 12:39:41 +08:00
@opengps 如果发生 segment fault, 是操作系统把 java 进程直接杀掉, catch 不住的.
Cabana
2020-08-21 12:50:05 +08:00
做成服务,放到另外的进程去
yuhangch
2020-08-21 13:45:17 +08:00
之前也碰到过类似的问题,实在是 catch 不到,最后用 python 调 dll,再用 java 调命令行,好蠢,但能凑合用
wysnylc
2020-08-21 14:06:55 +08:00
没有,你的方案已经很 ok 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX