当前搜索:

java JNI 实现原理 (六) 调用JNI方法

在前面的博客中提到过调用的JNI的entry是generate_native_entry,也就是说方法generate_native_entry是最终调用的我们的c++写的库文件里的方法...
阅读(3106) 评论(0)

java JNI 实现原理 (五) JNI方法解释调用

Hotspot主要有两种解释器,而下面我们主要讨论的是 Template Intepreter也叫asm interprete解释器, 文章下面的介绍基本都是基于template解释器 我们举一个invokespecial的例子,下面是templateTable方法解释invokespecial的代码 void TemplateTable::invokespecial(int byte_no)...
阅读(2718) 评论(1)

java JNI 实现原理 (四) 初始化JNI方法

在调用函数的时候都会在template 解释器中会使用 invokespecial  -> prepare_invoke -> load_invoke_cp_cache_entry -> resolve_cache_and_index 在代码中我们可以看到 case Bytecodes::_invokevirtual: case Bytecodes::_invokespeci...
阅读(3014) 评论(1)

java JNI 实现原理 (三) JNI中的RegisterNatives方法

我们常用javah去生成JNI的头文件,然后去实现自己定义的JNI方法,使用这种方式比较传统,但是我们可以看到定义的格式甚至连名字都必须按照规范 JNIEXPORT jint JNICALL Java_test_symlink (JNIEnv *, jobject, jstring, jstring); 完整的结构是Java_classpath_classname_native m...
阅读(7986) 评论(0)

java JNI 实现原理 (二) Linux 下如何 load JNILibrary

在博客java JNI (一)虚拟机中classloader的JNILibrary 中讨论了java中的Library 是由classloader 来load的,那我们来看看 classloader是如何去load 一个library的 ClassLoader.c   JNIEXPORT void JNICALL Java_java_lang_ClassLoader_00024Nat...
阅读(4496) 评论(0)

java JNI 实现原理 (一)虚拟机中classloader的JNILibrary

调用JNI的时候,通常我们使用System.loadLibrary(String libname)来load JNI library, 同样也可以使用System.load(String fileName)来load JNI library,两者的区别是一个只需要设置库的名字,比如如果libA.so 只要输入A就可以了,而libA.so的位置可以同过设置 java.library.path 或者...
阅读(4026) 评论(1)
    个人资料
    • 访问:463777次
    • 积分:5170
    • 等级:
    • 排名:第6036名
    • 原创:97篇
    • 转载:3篇
    • 译文:0篇
    • 评论:72条
    最新评论