如果在Windows操作系统下,可以用下面的方法研究一下1)安装完整的Microsoft Visual Studio C++ 这个步骤主要是要获得dumpbin.exe这个可执行文件 我的机器上这个文件在下面这个位置 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\dumpbin.exe2)执行下面这样的命令 dumpbin/EXPORTS "C:\Program Files\Java\jdk1.8.0\bin\msvcr100.dll" dumpbin/EXPORTS "C:\Program Files\Java\jdk1.8.0\jre\bin\java.dll" 3)会得到类似下面这样的结果 Dump of file C:\Program Files\Java\jdk1.8.0\bin\msvcr100.dll Section contains the following exports for MSVCR100.dll 1331 532 00082FCC atanDump of file C:\Program Files\Java\jdk1.8.0\jre\bin\java.dll Section contains the following exports for java.dll 156 9B 00006018 Java_java_lang_StrictMath_atan4)这样就能推断出,java.exe或者javaw.exe在运行的时候,通过调用java.dll来提供本地方法 而这些本地方法的实现,有可能是在msvcr100.dll里实现的【在Windows平台,Oracle调用的微软的具体实现】5)至于java.dll和MSVCR100.dll之间的相互依赖关系 可以用【Dependency Walker】工具打开java.dll查看如果你觉得1到4的过程过于麻烦,只想查看结果的话 可以只下载【http://www.dependencywalker.com/】(600K左右) 打开你自己机器上的java.dll就马上能明白了
这个步骤主要是要获得dumpbin.exe这个可执行文件
我的机器上这个文件在下面这个位置
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\dumpbin.exe2)执行下面这样的命令
dumpbin/EXPORTS "C:\Program Files\Java\jdk1.8.0\bin\msvcr100.dll"
dumpbin/EXPORTS "C:\Program Files\Java\jdk1.8.0\jre\bin\java.dll" 3)会得到类似下面这样的结果
Dump of file C:\Program Files\Java\jdk1.8.0\bin\msvcr100.dll
Section contains the following exports for MSVCR100.dll
1331 532 00082FCC atanDump of file C:\Program Files\Java\jdk1.8.0\jre\bin\java.dll
Section contains the following exports for java.dll
156 9B 00006018 Java_java_lang_StrictMath_atan4)这样就能推断出,java.exe或者javaw.exe在运行的时候,通过调用java.dll来提供本地方法
而这些本地方法的实现,有可能是在msvcr100.dll里实现的【在Windows平台,Oracle调用的微软的具体实现】5)至于java.dll和MSVCR100.dll之间的相互依赖关系
可以用【Dependency Walker】工具打开java.dll查看如果你觉得1到4的过程过于麻烦,只想查看结果的话
可以只下载【http://www.dependencywalker.com/】(600K左右)
打开你自己机器上的java.dll就马上能明白了