本文主要梳理了OpenJDK8中Java命令的动态依赖库,对于已经熟悉动态链接和HotSpot相关内容的读者,部分内容可以略过。首先,使用ldd命令查看java命令的动态链接库,包括linux虚拟链接库ld-linux-x86-64.so.2、系统组件libdl.so.2和glibc库libc.so.6等,其中glibc提供了C语言常用函数的动态支持,libpthread....
OpenJDK8 java命令动态库依赖梳理Linux
本文主要梳理了OpenJDK8中Java命令的动态依赖库,对于已经熟悉动态链接和HotSpot相关内容的读者,部分内容可以略过。首先,使用ldd命令查看java命令的动态链接库,包括linux虚拟链接库ld-linux-x86-64.so.2、系统组件libdl.so.2和glibc库libc.so.6等,其中glibc提供了C语言常用函数的动态支持,libpthread.so.0则负责多线程功能。关键的动态库是libjli.so,它包含JLI相关的函数,如JLI_Launch,表明Java的启动过程实际上是通过动态库加载的,main函数中并没有实际代码。
另一个未在依赖列表中但至关重要的库是libjvm.so,它是HotSpot虚拟机的核心动态库,用于JNI_CreateJavaVM创建Java虚拟机。通过查看libjvm.so的导出符号,发现其提供了大量的方法,总计超过20万个。这表明Java对系统的依赖主要集中在自身实现的组件,如垃圾收集器和执行引擎等。
最后的结论是,Java命令的启动过程依赖于多个动态库,但总体上,Java的核心功能和运行机制是由OpenJDK自身实现的,这体现了其高度自给自足的特性。Launcher作为壳层,其功能主要由其他模块提供。2024-08-10