编译JDK源码学习
Java虛擬機(JVM源碼):編譯OpenJDK源碼
一、JDK和OpenJDK的異同點
簡單理解下,兩者目前都是甲骨文公司,Sun Jdk也就是我們所說的JDK,是由帶有甲骨文官方發行編譯的。?
OpenJdk是開源的,是允許開發者自行編譯研究的。
二、如何編譯OpenJDK源碼(編譯前準備)
在編譯OpenJDK的時候,因為現在都出到10了,所以推薦大家編譯openJDK10,起碼這個不會落后。?
關于下載源碼:?
我個人推薦使用Git直接從github上拉即可,快。?
Git地址:OpenJDK10源碼
我個人用的是JDK10。
$ java -version
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
查看配置詳情:?
bash configure -h
三、配置構建
$ bash configure --with-debug-level=slowdebug --enable-dtrace --with-jvm-variants=server --with-target-bits=64 --enable-ccache --with-num-cores=8 --with-memory-size=8000 ?--disable-warnings-as-errors
1
配置參數說明:
--with-debug-level=slowdebug 啟用slowdebug級別調試
--enable-dtrace 啟用dtrace
--with-jvm-variants=server 編譯server類型JVM
--with-target-bits=64 指定JVM為64位
--enable-ccache 啟用ccache,加快編譯
--with-num-cores=8 編譯使用CPU核心數
--with-memory-size=8000 編譯使用內存
--disable-warnings-as-errors 忽略警告
構建成功后如下:
Configuration summary:
* Debug level: ? ?slowdebug
* HS debug level: debug
* JVM variants: ? server
* JVM features: ? server: 'aot cds cmsgc compiler1 compiler2 dtrace epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services vm-structs'?
* OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
* Version string: 12-internal+0-adhoc.wangdong.openjdk (12-internal)
Tools summary:
* Boot JDK: ? ? ? java version "10.0.2" 2018-07-17 Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13) Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode) ?(at /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home)
* Toolchain: ? ? ?clang (clang/LLVM from Xcode 9.4.1)
* C Compiler: ? ? Version 9.1.0 (at /usr/bin/clang)
* C++ Compiler: ? Version 9.1.0 (at /usr/bin/clang++)
Build performance summary:
* Cores to use: ? 7
* Memory limit: ? 8000 MB
* ccache status: ?Active (3.4.2)
四、編譯
make images
編譯成功后如下:大概可能需要幾分鐘
Note: Recompile with -Xlint:unchecked for details.
Creating support/demos/image/jfc/CodePointIM/CodePointIM.jar
Creating support/demos/image/jfc/FileChooserDemo/FileChooserDemo.jar
Creating support/demos/image/jfc/Font2DTest/Font2DTest.jar
Creating support/demos/image/jfc/SwingSet2/SwingSet2.jar
Creating support/demos/image/jfc/J2Ddemo/J2Ddemo.jar
Creating support/demos/image/jfc/Metalworks/Metalworks.jar
Creating support/demos/image/jfc/Notepad/Notepad.jar
Creating support/demos/image/jfc/Stylepad/Stylepad.jar
Creating support/demos/image/jfc/SampleTree/SampleTree.jar
Creating support/demos/image/jfc/TableExample/TableExample.jar
Creating support/demos/image/jfc/TransparentRuler/TransparentRuler.jar
Creating support/classlist.jar
Creating images/jmods/jdk.jlink.jmod
Creating images/jmods/java.base.jmod
Creating jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'macosx-x86_64-normal-server-slowdebug'
五、驗證是否編譯成功
一定要進入到編譯后的bin包里面。?
這里面有個java可執行文件,這個是我們需要的。?
執行./java -version命令?
出現以下即為編譯成功:
~/Develop/OpenJdk/openjdk/build/macosx-x86_64-normal-server-slowdebug/jdk/bin on jdk/jdk! ? 20:37:11
$ ./java -version
openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (slowdebug build 12-internal+0-adhoc.wangdong.openjdk)
OpenJDK 64-Bit Server VM (slowdebug build 12-internal+0-adhoc.wangdong.openjdk, mixed mode)
總結
- 上一篇: DIV的id和class
- 下一篇: PHP 入门学习