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

2022-06-02 11:11:48 +08:00
 microxiaoxiao
3202 次点击
所在节点    程序员
25 条回复
ly841000
2022-06-02 11:22:31 +08:00
对 JNI 理解不够可能不稳定,正常不会
LeegoYih
2022-06-02 11:32:30 +08:00
什么场景需要 JNI ?
unco020511
2022-06-02 11:34:55 +08:00
有什么不稳定的,不都是这样用的吗
sadfQED2
2022-06-02 11:35:52 +08:00
我大学 c 语言第一课老师跟我们讲“如果你觉得你的程序不符合预期,那一定是你代码有问题,不要怀疑编译器“

我觉得这话对你这问题适用
crayygy
2022-06-02 11:38:46 +08:00
整个 Android 的基础可以说都是 JNI ,的确 JNI 有它不太适用 /不太好用的时候,但是稳定性还是很不错的
ysc3839
2022-06-02 11:38:53 +08:00
如果不稳定的话,为啥 Java 还要搞 JNI ?弄个不稳定的东西来坑人?如果是有 bug ,为啥 Java 不修复,留着 bug 来坑人?
cheng6563
2022-06-02 11:39:12 +08:00
Java 自带的 IO 操作全是 JNI 调用,文件读取相关的 FileInputStream 类 的 read 方法就是 JNI 调用 private native int read0(...)
Socket 相关的 SocketInputStream 类的方法 private native int socketRead0(...)也是 JNI 调用
文件读写 Socket 读写还不稳定那就别用 Java 了
icylogic
2022-06-02 12:39:56 +08:00
这句话的意思是“我以前调用过然后出了问题,我水平太烂最后也没解决,所以你如果搞出问题我就怪你没听我的用了 JNI”
abcbuzhiming
2022-06-02 12:45:48 +08:00
所谓不稳定,其实就是解决不好内存释放问题,你能解决好内存释放,哪有什么不稳定
dcsuibian
2022-06-02 12:52:57 +08:00
不懂,只是好奇是干什么的库?
对 JNI 的印象一直停留在知道有但从来没用过的状态,貌似 Java 的生态圈里用的极少,不像 Python 那样用的居多。
nicevar
2022-06-02 12:58:36 +08:00
@dcsuibian 遇到一些有性能要求的库,比如解码之类的,像 Android 的 App ,对性能要求高的基本上都是 c/c++写的,包括各种游戏引擎。
dcsuibian
2022-06-02 13:04:02 +08:00
@nicevar 安卓我知道肯定很多,但普通 Java 的就没怎么见过了,毕竟偏后端。所以很好奇是啥库
Jooooooooo
2022-06-02 13:04:36 +08:00
"不稳定"
nicevar
2022-06-02 13:08:06 +08:00
@dcsuibian 普通的也很多,你后端的见得少,但是 Java 的桌面应用很常见,一方面是性能,另一方面一些库原本就是 c/c++写的,用 Java 再写一遍不现实。
chendy
2022-06-02 13:12:49 +08:00
好奇是实现了什么功能……
java 里一坨 native 操作也没见不稳定
不过确实存在因为写得不好导致不稳定的情况
Buges
2022-06-02 13:23:00 +08:00
当然是真的,C++是 unsafe 的语言。
microxiaoxiao
2022-06-02 13:59:03 +08:00
感谢大兄弟们,看起来 JNI 还是挺稳定,估计 BA 只是想忽悠我一下。主要是俺也不熟 JAVA 。
dqzcwxb
2022-06-02 13:59:09 +08:00
我猜上层换成 golang/python 也会存在同样问题,所以你猜应该是哪里有问题
microxiaoxiao
2022-06-02 14:01:17 +08:00
@dqzcwxb go python 没听说不稳定,因为说到了 jvm ,咋也搞不懂,咋也没敢问呀😊
CaptainD
2022-06-02 14:09:23 +08:00
稳不稳定通常取决于技术强不强,两年前我写什么都不稳定,现在稍微稳定点了

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

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

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

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

© 2021 V2EX