[TOC]
深入理解jvm虚拟机
第一章 编译openjdk7/8
编译openjdk
参考0:获取JDK源码
参考1:CentOS 6.5上编译安装OpenJDK7源码
参考2:Ubuntu 14.04.3 64位环境下OpenJDK7编译
参考3:CentOS下编译安装OpenJDK6过程遇到的问题
参考4:Linux环境编译安装OpenJDK
参考5:Centos7 配置jdk替换openjdk
- 安装ant(ant解压到了/opt目录下,并在path中创建了一个指向它的软连接) , jdk , fretype
ln -s /opt/apache-ant-1.9.7/bin/ant /usr/bin/ant
配置默认centos的默认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内核)
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'
第四章 虚拟机性能监控与故障处理工具
- JDK的命令行工具
- JDK的可视化工具
jdk bin目录下的命令工具,命令工具大多数是jdk\lib\tools.jar类库的一层包装而已。
JDK开发团队选择采用java代码来实现这些监测工具是特别有意思的:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能。
- tools.jar中的类库不属于java标准API,如果引入这个类库,就意味着你的程序只能运行与Hotspot(或者一些从Sun买了JDK源码的License的虚拟机,如IBM J9,BEA JRockit)上面,或者在部署程序时需要一起部署tools.jar
- [ ] P79 表4-1 Sun JDK监控和故障处理工具
疯狂java 16课
P135 4.3.3 与垃圾回收的附加选项
P182 -Xlint:fallthrough选项,java编译器会提示缺少break;的警告。