《深入理解Java虚拟机:JVM高级特性与最佳实践》走近Java

一、Java技术体系

Java技术体系包括以下几个组成部分:Java程序设计语言以及运行在Java虚拟机上的其他语言,各种硬件平台上的Java虚拟机,Class文件格式,Java API类库,来自商业机构和开源社区的第三方Java类库。
按照关注的重点业务领域进行划分,Java技术体系可分为如表1所示4个平台。

表1

平台名称平台描述
Java Card支持Java程序运行在小内存设备(比如智能卡)的平台
Java ME支持Java程序运行在移动终端(比如手机、PDA)的平台
Java SE支持桌面应用程序的Java平台
Java EE支持使用多层架构的企业应用程序的Java平台

Jave SE是标准平台,Java Card,Java ME,Java EE与Java SE相比具有共同点,也有不同点。相应于Java Card,Java ME,Java EE中的SDK,Java SE中具有JDK,另外还有JRE。JDK和JRE包含的内容以及内容的层次结构如图1所示。
如果不作特别说明,接下来的介绍以Java SE平台作为线索,比如Java技术体系的发展史其实是Java SE平台的发展史,Java虚拟机的发展史其实是Java SE平台下Java虚拟机的发展史。

图1

二、Java技术体系发展史

原名为“Oak”,于1995年改名为“Java”。经历版本序列:Java 1.0,Java 1.1,Java 1.2,Java 1.3,Java 1.4,Java 1.5,Java 1.6,Java 1.7,Java 1.8。最新开发版本为Java 1.9。
由于以Java SE平台为线索,等价的版本序列称呼有:Java SE 1.0,Java SE 1.1,Java SE 1.2,Java SE 1.3,Java SE 1.4,Java SE 1.5,Java SE 1.6,Java SE 1.7,Java SE 1.8,Java SE 1.9。
也可以是:JDK 1.0,JDK 1.1,JDK 1.2,JDK 1.3,JDK 1.4,JDK 1.5,JDK 1.6,JDK 1.7,JDK 1.8,JDK 1.9。

三、Java虚拟机发展史

常见Java虚拟机列表如下:Sun Classic VM,Sun HotSpot VM,Sun CDC-HI VM,Sun CLDC-HI VM,Sun Squawk VM,BEA JRockit VM,IBM J9 VM,Microsoft JVM等。

其中,Sun CDC-HI VM和Sun CLDC-HI VM是Java ME平台下的Java虚拟机,Sun Squawk VM是Java Card平台下的Java虚拟机。
另外,不同JDK版本使用的Java虚拟机如表2所示。

表2

JDK版本使用的Java虚拟机
JDK 1.0Sun Classic VM
JDK 1.1Sun Classic VM
JDK 1.2Sun HotSpot VM与Sun Classic VM并存
JDK 1.3Sun HotSpot VM与Sun Classic VM并存
JDK 1.4Sun HotSpot VM
JDK 1.5Sun HotSpot VM
JDK 1.6Sun HotSpot VM
JDK 1.7Sun HotSpot VM

四、Java技术体系展望

Java技术体系(Java SE平台)的总体发展趋势有以下几点:

  1. 模块化
  2. 混合语言,即Java虚拟机上支持的语言越来越不只有Java语言,还有新语言和旧语言的移植版本
  3. 多核并行
  4. Java语言语法进一步丰富
  5. 64位虚拟机

五、OpenJDK源代码

2006年11月11日,Sun公司宣布最终会将Java开源,并随之将Sun JDK的源代码(其中自然包括HotSpot VM的源代码,HotSpot VM便成为了Sun JDK和OpenJDK的共同虚拟机)在GPL v2协议下公开,并建立OpenJDK组织对其进行独立管理。在Sun JDK源代码发布过程中,产生了一些变化(比如Sun公司没有权限公开产权代码导致的变化,代码文件头的版权注释不一致等),但是总的来说,OpenJDK源代码与Sun JDK源代码几乎没有差异,因而相应编译得到的OpenJDK和Sun JDK也几乎没有区别。
要想深入了解JDK的技术细节,可以通过阅读JDK源代码,自己编译一个JDK,跟踪调试JDK等方式来进行学习。由于OpenJDK源代码与Sun JDK源代码几乎没有差异,因此如果想深入了解Sun JDK的技术细节,可以通过阅读OpenJDK源代码,自己编译一个OpenJDK,跟踪调试OpenJDK等方式。

5.1、编译OpenJDK

步骤如下:

  1. 获取OpenJDK源代码,作者从网上下载了openjdk-7u40-fcs-src-b43-26_aug_2013.zip源代码包
  2. 构建编译环境,首先安装一个“Bootstrap JDK”,作者安装目录为/mnt/bigdisk/apps/jdk1.6.0_45,再执行如下命令,安装编译时需要的工具(作者使用Ubuntu 14.04操作系统):

    1
    
    sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
    
  3. 使用编译脚本进行编译,编译脚本内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    export LANG=C
    
    #设定Bootstrap JDK路径
    export ALT_BOOTDIR=/mnt/bigdisk/apps/jdk1.6.0_45
    
    #允许自动下载依赖
    export ALLOW_DOWNLOADS=true
    
    #并行编译的线程数
    export HOTSPOT_BUILD_JOBS=2
    export ALT_PARALLEL_COMPILE_JOBS=2
    
    #跳过与先前版本的比较
    export SKIP_COMPARE_IMAGES=true
    
    #使用预编译头文件
    export USE_PRECOMPILED_HEADER=true
    
    #要编译的内容
    export BUILD_LANGTOOLS=true
    export BUILD_HOTSPOT=true
    export BUILD_JDK=true
    
    #避免某些插件的编译
    BUILD_DEPLOY=false
    
    #不编译安装包
    BUILD_INSTALL=false
    
    #编译结果存放目录
    export ALT_OUTPUTDIR=/mnt/bigdisk/openjdk/build
    
    unset JAVA_HOME
    unset CLASSPATH
    
    STATIC_CXX=false
    
    make DEBUG_BINARIES=true all 2>&1 | tee $ALT_OUTPUTDIR/build.log
    

5.2、跟踪调试OpenJDK

OpenJDK源码主要使用C/C++语言编写,因而,可使用GDB,Code::Blocks,Microsoft Visual Studio,Netbean For C/C++等工具或者IDE进行调试,从而可跟踪OpenJDK运行中的具体过程,比如本地方法的具体执行细节。



参考文献:
[1]http://stackoverflow.com/questions/2857376/difference-between-java-se-ee-me
[2]https://en.wikipedia.org/wiki/Java_Card
[3]http://mail.openjdk.java.net/pipermail/porters-dev/2008-April/000125.html
[4]http://openjdk.java.net/faq/
[5]http://www.brainbugs.net/build-openjdk-on-freebsd-9/
[6]http://ubuntuforums.org/archive/index.php/t-15120.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

supergame111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值