• libbylg
    2018-10-03
    据说JNI的性能很差,请问这个是否是事实,如果有这个问题,那么是否有提高性能的方法
    
     5
  • 随心而至
    2019-10-31
    linux下生成文中对应libfoo.so命令如下:
     gcc -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -fPIC -o libfoo.so -shared foo.c
    另外:System.load和System.loadLibrary 可以互换。
    动手做一下,就明白了。
    
     2
  • Scott
    2018-10-05
    HotSpot 虚拟机是通过句柄(handle)来完成上述需求的。

    句柄是不是只是移动对象时使用,如果每次访问引用都要读内存两次,那性能影响严重

    作者回复: JNI里每次访问都要通过句柄,理论上你可以解引用拿到oop,但是不安全,一旦垃圾回收在你用oop时移动了对象,你就会操作一个实际上已经失效了的oop

    
     1
  • Scott
    2018-10-05
    $ java -Djava.library.path=/PATH/TO/DIR/CONTAINING/libfoo.dylib org.example.Foo
    Hello, World
    这个地方应该是只写路径,不要把文件名加上

    作者回复: 多谢指出!

     1
     1
  • 饭粒
    2019-12-28
    Linux:
    # javac -h . org/example/Foo.java
    #
    # gcc -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -fPIC -o libfoo.so -shared foo.c
    #
    # tree ./
    ./
    ├── foo.c
    ├── libfoo.so
    ├── org
    │   └── example
    │   ├── Foo.class
    │   └── Foo.java
    └── org_example_Foo.h

    2 directories, 5 files
    # java -Djava.library.path=. org.example.Foo
    Hello, World
    展开
    
    
  • neohope
    2019-09-07
    老师,请问一下,使用JNI的时候,要考虑JDK版本与编译器版本的问题吗?我曾经在Windows下用JNI写过一些库,都是静态编译的,但实际测试时,发现不同版本的JDK,有时候要用不同版本的编译器。没法做到一个lib完全通用,感觉很奇怪。(不是32或64,而是vs2010,vs2015,vs2017这些。)
    
    
  • 东方
    2019-04-05
    老师: A类的方法a()调用C++ ,fork一个进程后,在子进程回调A#a()。a()打印了类的id,前后两个进程打印id是一样的。我的问题是,fork进程后,JVM还是同一个实例?

    
    
  • 未知
    2018-12-28
    在《深入理解jvm》第二版一书中,2.3.3章节讲述对象访问定位时提到,Hotspot是使用直接指针而不是句柄去访问对象的。是否是Java内部访问时使用的直接指针而native时使用的句柄??
    
    
  • 平淡
    2018-11-28
    请问这个JNIENV的参数,是当前执行native函数线程的JNIENV吗?线程的JNIENV是什么时候赋值的呢,找了好久也没找到,谢谢!
    
    
  • javaadu
    2018-10-23
    (1)JNI中也需要考虑对异常的处理
    (2)JNI中通过句柄引用java对象,
    (3)垃圾回收器会忽略jni中的局部引用和全局引用
    
    
我们在线,来聊聊吧