您的位置:首页 > 编程语言 > C语言/C++

如何找到java对应的c/c++源码

2015-01-11 18:48 489 查看
很多时候java经常被c鄙视,因为c说我是你的基础,但java竟然有如此强的生命力就必然有其存在的价值。本文不探讨各种开发语言的优劣,仅仅介绍如何找到java对应c/c++实现的源码。当我们追究一个java类到jdk库的时候,可能会遇到一个方法被声明为native,是的,它表明是一个由c/c++实现的本地方法,在运行时JVM将通过一定的映射规则找到相应的c/c++函数。

如果你使用过jni对这种映射就比较熟悉,如一个java类InvokeCpp,它调用的就是Test.dll动态链接库的hello函数。实现动态链接库的C要包含头文件和C文件,java也提供了javah工具方便开发者生成头文件。详细如何实现这里不再赘述,不在本文讨论范围,最后java调用的是C语言中Java_com_seaboat_cpp_InvokeCpp_hello函数,可以看出是由Java、包名、方法三个用下划线拼装起来的一个函数名。

package com.seaboat.cpp;

public class InvokeCpp{

static{

System.loadLibrary("Test");

}

public native void hello(String str);

public static void main(String[] args){

new InvokeCpp().hello("hello");

}

}

讨论完jni后回到正题,要查看jdk中的native方法首先要把openjdk源码下下来,它的目录结构如下,jdk/src下基本包含了大多jdk的native方法,其中share是多个系统共享的,其他linux、solaris、windows则是各自操作系统独有的。



假如我们要找java.lang.String类中的public native String intern() 本地方法则可以在share/native/java/lang目录下找到String.c,Java_java_lang_String_intern便是对应的C函数源码。



喜欢研究java的同学可以交个朋友,下面是本人的微信号:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: