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

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

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

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

    bring me some bad memories
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4224 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 03:37 · PVG 11:37 · LAX 20:37 · JFK 23:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.