JVM笔记 – 走近Java
本文由发表于3年前 | J2EE | 暂无评论 |  被围观 2,250 views+
1、走近Java1.1、概述1.2、Java技术体系1.3、Java发展史1.4、Java虚拟机发展史1.4.1、Sun Classic/Exact VM1.4.2、Sun HotSpot VM1.4.3、Sun Mobile-Embedded VM/Meta-Circular VM1.4.4、BEA JRockit/IBM J9 VM1.4.5、Azul VM/BEA Liquid VM1.4.6、Apache Harmony/Google Android Darvik VM1.4.7、Microsoft JVM及其他1.5、展望Java技术的未来1.5.1、模块化1.5.2、混合语言1.5.3、多核并行1.5.4、进一步丰富语法1.5.5、64位虚拟机1.6、实战:自己编译JDK1.6.1、获取JDK源码1.6.2、系统需求1.6.3、构建编译环境1.6.4、进行编译1.6.5、在IDE工具中进行源码调试1.7、本章小结
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》笔记 - 走近Java

进一步的了解Java的历史和技术发展方向,可以更好地理解技术新特性的作用,从而找到进一步学习的方向感,嗯,也就有了技术安全感。 😀

以下是整体的思维导图:

1、走近Java
1.1、概述
1.2、Java技术体系

2014110102

1.3、Java发展史

HotSpot 虚拟机:JDK 1.3及之后所有版本的Sun JDK的默认虚拟机JDK。

1.4同样发布了很多新的技术特性,如正则表达式、异常链、NIO、日志类、XML 解析器和 XSLT 转换器等。

JDK1.5 在Java语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环( foreach 循环)等语法特性都是在JDK1.5 中加入的。

JDK 1.6 的改进包括:提供动态语言支持(通过内置 Mozilla JavaScript Rhino 引擎实现)、提供编译 API 和微型 HTTP 服务器 API 等。同时,这个版本对 Java 虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法都有相当多的改动。

“ B 计划”把不能按时完成的 Lambda 项目、 Jigsaw 项目和 Coin 项目的部分改进延迟到 JDK 1.8 之中。最终, JDK 1.7 的主要改进包括:提供新的 G1 收集器( G1 在发布时依然处于 Experimental 状态,直至 2012 年 4 月的 Update 4 中才正式“转正”)、加强对非 Java 语言的调用支持( JSR-292, 这项特性到目前为止依然没有完全实现定型)、升级类加载架构等。

1.4、Java虚拟机发展史
1.4.1、Sun Classic/Exact VM

世界上第一款商用 Java 虚拟机

这款虚拟机只能使用纯解释器方式来执行 Java 代码,如果要使用 JIT 编译器,就必须进行外挂。但是假如外挂了 JIT 编译器, JIT 编译器就完全接管了虚拟机的执行系统,解释器便不再工作了。

java version"1.2.2"
Classic VM(build JDK-1.2.2-001,green threads, sunwjit)

其中的"sunwjit" 就是 Sun 提供的外挂编译器,其他类似的外挂编译器还有 Symantec JIT和shuJIT等。

Exact VM在商业应用上只存在了很短暂的时间就被更为优秀的HotSpot VM所取代

Class VM在JDK 1.2 之前是 Sun JDK 中唯一的虚拟机,在 JDK 1.2 时,它与 HotSpot VM 并存,但默认使用的是 Classic VM。

1.4.2、Sun HotSpot VM

HotSpot VM 既继承了 Sun 之前两款商用虚拟机的优点(准确式内存管理)

HotSpot VM 的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知 JIT 编译器以方法为单位进行编译。

在 2008 年和 2009 年, Oracle 公司分别收购了 BEA 公司和 Sun 公司,这样 Oracle 就同时拥有了两款优秀的 Java 虚拟机: JRockit VM 和 HotSpot VM。

1.4.3、Sun Mobile-Embedded VM/Meta-Circular VM
1.4.4、BEA JRockit/IBM J9 VM

由于专注于服务器端应用,它可以不太关注程序启动速度,因此 JRockit 内部不包含解析器实现,全部代码都靠即时编译器编译后执行。除此之外, JRockit 的垃圾收集器和 MissionControl 服务套件等部分的实现,在众多 Java 虚拟机中也一直处于领先水平。

IBM J9 的市场定位与 Sun HotSpot 比较接近,它是一款设计上从服务器端到桌面应用再到嵌入式都全面考虑的多用途虚拟机。

1.4.5、Azul VM/BEA Liquid VM

Azul VM 和 BEA Liquid VM 这类特定硬件平台专有的虚拟机才是“高性能”的武器。

Liquid VM 不需要操作系统的支持,或者说它自己本身实现了一个专用操作系统的必要功能,如文件系统、网络支持等。由虚拟机越过通用操作系统直接控制硬件可以获得很多好处,如在线程调度时,不需要再进行内核态/用户态的切换等,这样可以最大限度-地发挥硬件的能力,提升 Java 程序的执行性能。

1.4.6、Apache Harmony/Google Android Darvik VM

Apache Harmony)被吸纳进 IBM 的 JDK 7 实现及 Google Android SDK 之中,尤其是对 Android 的发展起到了很大的推动作用。

Dalvik VM 是 Android 平台的核心组成部分之一,它的名字来源于冰岛一个名为 Dalvik 的小渔村。 Dalvik VM 并不是一个 Java 虚拟机,它没有遵循 Java 虚拟机规范,不能直接执行 Java 的 Class 文件,使用的是寄存器架构而不是 JVM 中常见的栈架构。

1.4.7、Microsoft JVM及其他
1.5、展望Java技术的未来
1.5.1、模块化

模块化是建立各种功能的标准件的前提。最近几年 OSGi 技术的迅速发展、各个厂商在 JCP 中对模块化规范的激烈斗争[ 1], 都能充分说明模块化技术的迫切和重要。

OSGi 已经发布到 R5.0 版本,而 Jigsaw 从 Java 7 延迟至 Java 8,在 2012 年 7 月又不得不宣布推迟到 Java 9 中发布。

《深入理解 OSGi: Equinox 原理、应用与最佳实践》

1.5.2、混合语言

各种语言之间的交互不存在任何困难,就像使用自己语言的原生 API 一样方便[ 1], 因为它们最终都运行在一个虚拟机之上。

在同一个虚拟机上运行的其他语言与 Java 之间的交互一般都比较容易,但非 Java 语言之间的交互一般都比较烦琐。

1.5.3、多核并行

早在 JDK 1.5 就已经引入 java.util.concurrent 包实现了一个粗粒度的并发框架。而 JDK 1.7 中加入的 java.util.concurrent.forkjoin 包则是对这个框架的一次重要扩充。

通过利用 Fork/Join 模式,我们能够更加顺畅地过渡到多核时代。

函数式编程的一个重要优点就是这样的程序天然地适合并行运行,这对 Java 语言在多核时代继续保持主流语言的地位有很大帮助。

Sumatra 项目就是为 Java 提供使用 GPU( Graphics Processing Units) 和 APU( Accelerated Processing Units) 运算能力的工具。

在 JDK 外围,也出现了专为满足并行计算需求的计算框架,如 Apache 的 Hadoop Map/Reduce。

1.5.4、进一步丰富语法
1.5.5、64位虚拟机

由于指针膨胀和各种数据类型对齐补白的原因,运行于 64 位系统上的 Java 应用需要消耗更多的内存。

在 JDK 1.6 Update 14 之后,提供了普通对象指针压缩功能(- XX:+ UseCompressedOops, 这个参数不建议显式设置,建议维持默认由虚拟机的 Ergonomics 机制自动开启)

1.6、实战:自己编译JDK
1.6.1、获取JDK源码

OpenJDK 7 和 Oracle JDK 7 在程序上是非常接近的,两者共用了大量相同的代码,所以我们编译的 OpenJDK, 基本上可以认为性能、功能和执行逻辑上都和官方的 Oracle JDK 是一致的。

1.6.2、系统需求
1.6.3、构建编译环境
1.6.4、进行编译
1.6.5、在IDE工具中进行源码调试
1.7、本章小结
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/jvm-note-introduce-java.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2014 11/1
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    没有评论
给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 Java Web笔记 – 简单的权限管理控制实现 2011/11/12
2 《從0到1》笔记 2015/8/19
3 ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池 2012/7/30
4 Javascript笔记 – javascript中的函数 2012/5/22
5 肖申克的救赎:救赎心中那份本该具有的追求信念的勇气 2011/8/11
6 web前端项目搭建说明 2016/5/1
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.