V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
microxiaoxiao
V2EX  ›  程序员

最近用 C++实现了一个库,上层应用是 Java ,听 BA 说,如果 Java 通过 JNI 调用 C++会存在不稳定的情况,是真的嘛?

  •  
  •   microxiaoxiao · 2022-06-02 11:11:48 +08:00 · 3165 次点击
    这是一个创建于 902 天前的主题,其中的信息可能已经有所发展或是发生改变。
    25 条回复    2022-06-03 02:17:46 +08:00
    ly841000
        1
    ly841000  
       2022-06-02 11:22:31 +08:00
    对 JNI 理解不够可能不稳定,正常不会
    LeegoYih
        2
    LeegoYih  
       2022-06-02 11:32:30 +08:00
    什么场景需要 JNI ?
    unco020511
        3
    unco020511  
       2022-06-02 11:34:55 +08:00
    有什么不稳定的,不都是这样用的吗
    sadfQED2
        4
    sadfQED2  
       2022-06-02 11:35:52 +08:00 via Android   ❤️ 5
    我大学 c 语言第一课老师跟我们讲“如果你觉得你的程序不符合预期,那一定是你代码有问题,不要怀疑编译器“

    我觉得这话对你这问题适用
    crayygy
        5
    crayygy  
       2022-06-02 11:38:46 +08:00
    整个 Android 的基础可以说都是 JNI ,的确 JNI 有它不太适用 /不太好用的时候,但是稳定性还是很不错的
    ysc3839
        6
    ysc3839  
       2022-06-02 11:38:53 +08:00 via Android
    如果不稳定的话,为啥 Java 还要搞 JNI ?弄个不稳定的东西来坑人?如果是有 bug ,为啥 Java 不修复,留着 bug 来坑人?
    cheng6563
        7
    cheng6563  
       2022-06-02 11:39:12 +08:00   ❤️ 2
    Java 自带的 IO 操作全是 JNI 调用,文件读取相关的 FileInputStream 类 的 read 方法就是 JNI 调用 private native int read0(...)
    Socket 相关的 SocketInputStream 类的方法 private native int socketRead0(...)也是 JNI 调用
    文件读写 Socket 读写还不稳定那就别用 Java 了
    icylogic
        8
    icylogic  
       2022-06-02 12:39:56 +08:00   ❤️ 11
    这句话的意思是“我以前调用过然后出了问题,我水平太烂最后也没解决,所以你如果搞出问题我就怪你没听我的用了 JNI”
    abcbuzhiming
        9
    abcbuzhiming  
       2022-06-02 12:45:48 +08:00
    所谓不稳定,其实就是解决不好内存释放问题,你能解决好内存释放,哪有什么不稳定
    dcsuibian
        10
    dcsuibian  
       2022-06-02 12:52:57 +08:00
    不懂,只是好奇是干什么的库?
    对 JNI 的印象一直停留在知道有但从来没用过的状态,貌似 Java 的生态圈里用的极少,不像 Python 那样用的居多。
    nicevar
        11
    nicevar  
       2022-06-02 12:58:36 +08:00
    @dcsuibian 遇到一些有性能要求的库,比如解码之类的,像 Android 的 App ,对性能要求高的基本上都是 c/c++写的,包括各种游戏引擎。
    dcsuibian
        12
    dcsuibian  
       2022-06-02 13:04:02 +08:00
    @nicevar 安卓我知道肯定很多,但普通 Java 的就没怎么见过了,毕竟偏后端。所以很好奇是啥库
    Jooooooooo
        13
    Jooooooooo  
       2022-06-02 13:04:36 +08:00
    "不稳定"
    nicevar
        14
    nicevar  
       2022-06-02 13:08:06 +08:00
    @dcsuibian 普通的也很多,你后端的见得少,但是 Java 的桌面应用很常见,一方面是性能,另一方面一些库原本就是 c/c++写的,用 Java 再写一遍不现实。
    chendy
        15
    chendy  
       2022-06-02 13:12:49 +08:00
    好奇是实现了什么功能……
    java 里一坨 native 操作也没见不稳定
    不过确实存在因为写得不好导致不稳定的情况
    Buges
        16
    Buges  
       2022-06-02 13:23:00 +08:00 via Android
    当然是真的,C++是 unsafe 的语言。
    microxiaoxiao
        17
    microxiaoxiao  
    OP
       2022-06-02 13:59:03 +08:00 via Android
    感谢大兄弟们,看起来 JNI 还是挺稳定,估计 BA 只是想忽悠我一下。主要是俺也不熟 JAVA 。
    dqzcwxb
        18
    dqzcwxb  
       2022-06-02 13:59:09 +08:00
    我猜上层换成 golang/python 也会存在同样问题,所以你猜应该是哪里有问题
    microxiaoxiao
        19
    microxiaoxiao  
    OP
       2022-06-02 14:01:17 +08:00 via Android
    @dqzcwxb go python 没听说不稳定,因为说到了 jvm ,咋也搞不懂,咋也没敢问呀😊
    CaptainD
        20
    CaptainD  
       2022-06-02 14:09:23 +08:00
    稳不稳定通常取决于技术强不强,两年前我写什么都不稳定,现在稍微稳定点了
    microxiaoxiao
        21
    microxiaoxiao  
    OP
       2022-06-02 14:13:31 +08:00 via Android
    @CaptainD 不考虑自身因素导致的,主要考虑机制本身的变动,或者它本身不可控的,比如它内存释放机制。
    hhjuteman
        22
    hhjuteman  
       2022-06-02 14:36:58 +08:00
    @dcsuibian ffmpeg opencv webrtc
    几乎所有的安卓视频滤镜,美颜,传输,协议控制等等底层都是通过 JNI 调用的 c/c++库
    hu8245
        23
    hu8245  
       2022-06-02 15:00:22 +08:00
    不会是 JNI 和 Native 在内存分配上没有协商吧,写这两个模块的人要有清晰的职责划分,不然,就是一团粥
    anonydmer
        24
    anonydmer  
       2022-06-02 15:39:43 +08:00
    一个敢说,一个敢听,嘿
    privapps
        25
    privapps  
       2022-06-03 02:17:46 +08:00
    你如果做过软件移植就知道什么叫不稳定了
    不同的编译器, gcc, xlc 不同版本,不同操作系统 redhat, debian, windows, mac x64, mac arm, 不同架构 x86, x64, arm ...

    bring me some bad memories
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:29 · PVG 13:29 · LAX 21:29 · JFK 00:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.