V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
muyiluop
V2EX  ›  问与答

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

  •  
  •   muyiluop · 2020-08-21 11:27:52 +08:00 · 1038 次点击
    这是一个创建于 1371 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    7 条回复    2020-08-21 14:06:55 +08:00
    Cbdy
        1
    Cbdy  
       2020-08-21 11:51:53 +08:00 via Android
    如果可以的话,用第三方代码之前审查一下对方代码。
    不然就整成微服务吧。
    opengps
        2
    opengps  
       2020-08-21 11:52:54 +08:00
    用子线程执行,他不能退出你主线程吧?
    我对第三方库的调用,习惯带上 try 包裹预料之外的问题
    Jooooooooo
        3
    Jooooooooo  
       2020-08-21 11:59:06 +08:00
    读一下代码再把代码跑在自己的服务里
    Jooooooooo
        4
    Jooooooooo  
       2020-08-21 12:39:41 +08:00
    @opengps 如果发生 segment fault, 是操作系统把 java 进程直接杀掉, catch 不住的.
    Cabana
        5
    Cabana  
       2020-08-21 12:50:05 +08:00 via Android   ❤️ 1
    做成服务,放到另外的进程去
    yuhangch
        6
    yuhangch  
       2020-08-21 13:45:17 +08:00
    之前也碰到过类似的问题,实在是 catch 不到,最后用 python 调 dll,再用 java 调命令行,好蠢,但能凑合用
    wysnylc
        7
    wysnylc  
       2020-08-21 14:06:55 +08:00
    没有,你的方案已经很 ok 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 14:00 · PVG 22:00 · LAX 07:00 · JFK 10:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.