[TOC]
深入理解jvm虛擬機
第一章 編譯openjdk7/8
編譯openjdk
參考0:獲取JDK源碼
參考1:CentOS 6.5上編譯安裝OpenJDK7源碼
參考2:Ubuntu 14.04.3 64位環(huán)境下OpenJDK7編譯
參考3:CentOS下編譯安裝OpenJDK6過程遇到的問題
參考4:Linux環(huán)境編譯安裝OpenJDK
參考5:Centos7 配置jdk替換openjdk
- 安裝ant(ant解壓到了/opt目錄下赚抡,并在path中創(chuàng)建了一個指向它的軟連接) , jdk , fretype
ln -s /opt/apache-ant-1.9.7/bin/ant /usr/bin/ant
配置默認(rèn)centos的默認(rèn)jdk,詳見參考3:
編譯腳本(名字可隨意openjdkbuild但骨,然后source openjdkbuild)
unset CLASSPATH
unset JAVA_HOME
export LANG=C
export ALT_BOOTDIR=/usr/java/jdk1.6.0_26
export ANT_HOME=/opt/apache-ant-1.9.7
export ALT_FREETYPE_LIB_PATH=/usr/local/lib
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
export ALT_FREETYPE_HEADERS_PATH=/usr/local/include/freetype2
- 下載openjdk7
$ hg clone http://hg.openjdk.java.net/jdk7u/jdk7u jdk7u
$ cd jdk7u
$ bash ./get_source.sh
- 編譯完成
ubuntu編譯openjdk7
1. 取得openjdk7源碼
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev
2. check_os_version SUPPORTED_OS_VERSION增加4% 4.10%(我的是4.10內(nèi)核)
checks: check_os_version check_j2se_version
# We do not want people accidentally building on old systems (e.g. Linux 2.2.x,
# Solaris 2.5.1, 2.6).
# Disable this check by setting DISABLE_HOTSPOT_OS_VERSION_CHECK=ok.
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4% 4.10%
腳本
#!/bin/bash
export LANG=C
export ALT_BOOTDIR=/usr/local/java/jdk1.6.0_45
export ALT_DEVTOOLS_PATH=/usr/bin
export ALLOW_DOWNLOADS=true #是否需要自動下載,jaxp,jaws可以自動下載
export SKIP_DEBUG_BUILD=false #是否跳過編譯debug版
export SKIP_FASTDEBUG_BUILD=false #是否跳過編譯fastdebug版
export DEBUG_NAME=debug
export HOTSPOT_BUILD_JOBS=4
export ALL_PARALLEL_COMPILE_JOBS=4
export ALT_DEVTOOLS_PATH=/usr/bin
export SKIP_COMPARE_IMAGES=true
export USE_PRECOMPILED_HEADER=true
BUILD_DEPLOY=false
BUILD_INSTALL=false
unset CLASSPATH
unset JAVA_HOME
make sanity & make all 2>&1
編譯openjdk8
ubuntu 14.04下
bash ./configure --enable-debug
make CONF=linux-x86_64-normal-server-fastdebug
## Finished jdk (build time 00:03:26)
----- Build times -------
Start 2016-07-23 11:53:42
End 2016-07-23 12:12:36
00:00:28 corba
00:13:40 hotspot
00:00:18 jaxp
00:00:24 jaxws
00:03:26 jdk
00:00:37 langtools
00:18:54 TOTAL
-------------------------
Finished building OpenJDK for target 'default'
hadoop@hadoop:~/jdk8u/build/linux-x86_64-normal-server-fastdebug/jdk/bin$ ./java -version
openjdk version "1.8.0-internal-fastdebug"OpenJDK Runtime Environment (build 1.8.0-internal-fastdebug-hadoop_2016_07_23_11_53-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00-fastdebug, mixed mode)
Centos6.8下
# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
----- Build times -------
Start 2016-07-24 03:30:24
End 2016-07-24 03:48:55
00:00:35 corba
00:12:10 hotspot
00:00:17 jaxp
00:00:30 jaxws
00:04:29 jdk
00:00:30 langtools
00:18:31 TOTAL
-------------------------
Finished building OpenJDK for target 'default'
第四章 虛擬機性能監(jiān)控與故障處理工具
- JDK的命令行工具
- JDK的可視化工具
jdk bin目錄下的命令工具,命令工具大多數(shù)是jdk\lib\tools.jar類庫的一層包裝而已。
JDK開發(fā)團隊選擇采用java代碼來實現(xiàn)這些監(jiān)測工具是特別有意思的:當(dāng)應(yīng)用程序部署到生產(chǎn)環(huán)境后疚察,無論是直接接觸物理服務(wù)器還是遠程Telnet到服務(wù)器上都可能會受到限制。借助tools.jar類庫里面的接口仇奶,我們可以直接在應(yīng)用程序中實現(xiàn)功能強大的監(jiān)控分析功能貌嫡。
- tools.jar中的類庫不屬于java標(biāo)準(zhǔn)API,如果引入這個類庫该溯,就意味著你的程序只能運行與Hotspot(或者一些從Sun買了JDK源碼的License的虛擬機衅枫,如IBM J9,BEA JRockit)上面朗伶,或者在部署程序時需要一起部署tools.jar
- [ ] P79 表4-1 Sun JDK監(jiān)控和故障處理工具
瘋狂java 16課
P135 4.3.3 與垃圾回收的附加選項
P182 -Xlint:fallthrough選項,java編譯器會提示缺少break;的警告步咪。