本地jvm文件(Object.c,Class.c)在哪里编译/链接到哪里?

TuTor:

标题说明了一切。我想研究一下jvm可能会找到一个java / lang / Object.so(与Class ...以及具有本机的任何其他Java类相同),或等效的,但无处可寻。我试图研究OpenJDK的编译脚本,但无法理解它们。

答案:libjava.so

相关链接:http : //fuseyism.com/openjdk/cvmi/java2vm.xhtml

horstr:

首先,是所提供的Java类库的Java代码jre/lib/rt.jar在JVM启动/执行期间,它不会被即时编译为本机代码,而是由Hotspot编译器实时进行编译(如果执行了阈值次数,否则将使用解释器)。

有一种名为的优化Class Data Sharing,可以从rt.jarJVM中解析类并存储内部使用的内存中类表示形式,jre/lib/[arch]/[type]/classes.jsa从而不必一遍又一遍地处理所涵盖的类。该文件可以通过内存映射由多个JVM实例共享。

然后是jre/lib/[arch]/[type]/libjvm.so,其中包含实际的JVM代码,包括Hotspot编译器。

最后,还有许多其他库,jre/lib/[arch]其中包含Java类库所需的JNI实现。例如,libjava.so包含java.langjava.io包的各种JNI导出,以及其他。

随着Java 9的推出,Java模块系统也受到了影响rt.jarrt.jar被替换为中的相应模块jmods此外,该体系结构已从内部路径删除,并且该jre子目录已不存在。

Java 9还引入了一个实验性的提前编译器,至少在理论上可以用于预编译Java类库。AFAIK,从Java 14开始仍处于试验阶段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查终端命令链接到哪里或哪个文件?

在Xcode中,编译c ++时,文件流在哪里输出文件?

c程序的目标文件存储在哪里?

gcc在哪里寻找C和C ++头文件?

包含的C ++ / C头文件的实现在哪里?

文件放在哪里,以便C程序可以访问它们?

Windows(C :)驱动器中的Ubuntu文件在哪里?

在C ++头文件中将使用指令放在哪里

标准库应该写在哪里?.c或.h文件?

IntelliJ在键入期间进行编译时会将.class文件放在哪里

如何在c程序中编译expat xml解析?以及在哪里安装外籍人士。将文件放在 cygwin 编译器的何处

链接C代码时如何分辨符号在哪里定义

在哪里可以找到将我的apk文件上传到哪里?

官方C ++文档在哪里

C#在哪里选择

编译后的R文件在哪里?

PyCharm在哪里存储编译文件?

将Zoho CRM链接到Kashflow时在哪里存储XML或PHP文件

我在哪里指定要链接到FFI for Rust的文件名?

C#方法-哪些参数转到哪里?

目标c:在哪里将文件保存在文件夹中?

我在哪里输出 .csv 文件跟踪数据?我不断收到 IOError: [Errno 13] Permission denied: 'C:\\Python27' 无论我在哪里尝试输出它

Visual Studio 2017可再发行的Visual C ++的MSM文件在哪里?

Visual Studio 2015 中的 C++ 调试器可执行文件在哪里?

C 中的 fopen() 函数在哪里创建以写入模式打开的文件?

在哪里放置C ++常数?在分隔/共享的头文件(main.h)中?

C和POSIX在哪里指定必须在文件范围内包含标准头?

MPLAB中的文件类型mainp24f.c在哪里?

在 C++ 中创建类时将标准库头文件放在哪里?