1
ly841000 2022-06-02 11:22:31 +08:00
对 JNI 理解不够可能不稳定,正常不会
|
2
LeegoYih 2022-06-02 11:32:30 +08:00
什么场景需要 JNI ?
|
3
unco020511 2022-06-02 11:34:55 +08:00
有什么不稳定的,不都是这样用的吗
|
4
sadfQED2 2022-06-02 11:35:52 +08:00 via Android 5
我大学 c 语言第一课老师跟我们讲“如果你觉得你的程序不符合预期,那一定是你代码有问题,不要怀疑编译器“
我觉得这话对你这问题适用 |
5
crayygy 2022-06-02 11:38:46 +08:00
整个 Android 的基础可以说都是 JNI ,的确 JNI 有它不太适用 /不太好用的时候,但是稳定性还是很不错的
|
6
ysc3839 2022-06-02 11:38:53 +08:00 via Android
如果不稳定的话,为啥 Java 还要搞 JNI ?弄个不稳定的东西来坑人?如果是有 bug ,为啥 Java 不修复,留着 bug 来坑人?
|
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 了 |
8
icylogic 2022-06-02 12:39:56 +08:00 11
这句话的意思是“我以前调用过然后出了问题,我水平太烂最后也没解决,所以你如果搞出问题我就怪你没听我的用了 JNI”
|
9
abcbuzhiming 2022-06-02 12:45:48 +08:00
所谓不稳定,其实就是解决不好内存释放问题,你能解决好内存释放,哪有什么不稳定
|
10
dcsuibian 2022-06-02 12:52:57 +08:00
不懂,只是好奇是干什么的库?
对 JNI 的印象一直停留在知道有但从来没用过的状态,貌似 Java 的生态圈里用的极少,不像 Python 那样用的居多。 |
11
nicevar 2022-06-02 12:58:36 +08:00
@dcsuibian 遇到一些有性能要求的库,比如解码之类的,像 Android 的 App ,对性能要求高的基本上都是 c/c++写的,包括各种游戏引擎。
|
13
Jooooooooo 2022-06-02 13:04:36 +08:00
"不稳定"
|
14
nicevar 2022-06-02 13:08:06 +08:00
@dcsuibian 普通的也很多,你后端的见得少,但是 Java 的桌面应用很常见,一方面是性能,另一方面一些库原本就是 c/c++写的,用 Java 再写一遍不现实。
|
15
chendy 2022-06-02 13:12:49 +08:00
好奇是实现了什么功能……
java 里一坨 native 操作也没见不稳定 不过确实存在因为写得不好导致不稳定的情况 |
16
Buges 2022-06-02 13:23:00 +08:00 via Android
当然是真的,C++是 unsafe 的语言。
|
17
microxiaoxiao OP 感谢大兄弟们,看起来 JNI 还是挺稳定,估计 BA 只是想忽悠我一下。主要是俺也不熟 JAVA 。
|
18
dqzcwxb 2022-06-02 13:59:09 +08:00
我猜上层换成 golang/python 也会存在同样问题,所以你猜应该是哪里有问题
|
19
microxiaoxiao OP @dqzcwxb go python 没听说不稳定,因为说到了 jvm ,咋也搞不懂,咋也没敢问呀😊
|
20
CaptainD 2022-06-02 14:09:23 +08:00
稳不稳定通常取决于技术强不强,两年前我写什么都不稳定,现在稍微稳定点了
|
21
microxiaoxiao OP @CaptainD 不考虑自身因素导致的,主要考虑机制本身的变动,或者它本身不可控的,比如它内存释放机制。
|
22
hhjuteman 2022-06-02 14:36:58 +08:00
@dcsuibian ffmpeg opencv webrtc
几乎所有的安卓视频滤镜,美颜,传输,协议控制等等底层都是通过 JNI 调用的 c/c++库 |
23
hu8245 2022-06-02 15:00:22 +08:00
不会是 JNI 和 Native 在内存分配上没有协商吧,写这两个模块的人要有清晰的职责划分,不然,就是一团粥
|
24
anonydmer 2022-06-02 15:39:43 +08:00
一个敢说,一个敢听,嘿
|
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 |