深刻理解Java虚拟机-走近Java

本博客主要参考周志明老师的《深刻理解Java虚拟机》第二版java

读书是一种跟大神的交流。阅读《深刻理解Java虚拟机》受益不浅,对Java虚拟机有初步的认识。这里写博客主要出于如下三个目的:一方面是记录,方便往后阅读;一方面是加深对内容的理解;一方面是分享给你们,但愿对你们有帮助。程序员

《深刻理解Java虚拟机》全书总结以下:web

序号 内容 连接地址
1 深刻理解Java虚拟机-走近Java http://www.javashuo.com/article/p-wmquqpab-n.html
2 深刻理解Java虚拟机-Java内存区域与内存溢出异常 http://www.javashuo.com/article/p-qbxkmyli-a.html
3 深刻理解Java虚拟机-垃圾回收器与内存分配策略 http://www.javashuo.com/article/p-oivmnobw-ds.html
4 深刻理解Java虚拟机-虚拟机执行子系统 http://www.javashuo.com/article/p-qaeyzgca-a.html
5 深刻理解Java虚拟机-程序编译与代码优化 http://www.javashuo.com/article/p-gmrxlpja-o.html
6 深刻理解Java虚拟机-高效并发 http://www.javashuo.com/article/p-yuiduguo-b.html

在这里插入图片描述

世界上并无完美的程序,但咱们并不所以而沮丧,由于写程序原本就是一个不断追求完美的程。编程

概述

Java不只仅是一门编程语言,仍是一个由一系列计算机软件和规范造成的技术体系,这 个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并普遍应用于嵌入式系统、移动终端、企业服务器、大型机等各类场合,如图1-1所示。时至今日,Java技术体系已 经吸引了900多万软件开发者,这是全球最大的软件开发团队。使用Java的设备多达几十亿 台,其中包括11亿多台我的计算机、30亿部移动电话及其余手持设备、数量众多的智能卡, 以及大量机顶盒、导航系统和其余设备。小程序

在这里插入图片描述

Java能得到如此普遍的承认,除了它拥有一门结构严谨、面向对象的编程语言以外,还 有许多不可忽视的优势:它摆脱了硬件平台的束缚,实现了"一次编写 ,处处运行"的理想;它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问 题;它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增长而 得到更高的性能;它有一套完善的应用程序接口,还有无数来自商业机构和开源社区的第三 方类库来帮助它实现各类各样的功能……Java所带来的这些好处使程序的开发效率获得了很 大的提高。做为一名Java程序员,在编写程序时除了尽情发挥Java的各类优点外,还应该去了解和思考一下Java技术体系中这些技术特性是如何实现的。认识这些技术运做的本质,是 本身思考"程序这样写好很差"的基础和前提。当咱们在使用一种技术时,若是再也不依赖书本和他人就能获得这些问题的答案,那才算上升到了"不惑"的境界。安全

本书将与读者一块儿分析Java技术中最重要的那些特性的实现原理。在本章中,咱们将重点介绍Java技术体系内容以及Java的历史、如今和将来的发展趋势。ruby

Java技术体系

从广义上讲,Clojure、JRuby、Groovy等运行于Java虚拟机上的语言及其相关的程序都 属于Java技术体系中的一员。若是仅从传统意义上来看,Sun官方所定义的Java技术体系包括如下几个组成部分:服务器

  • Java程序设计语言
  • 各类硬件平台上的Java虚拟机
  • Class文件格式
  • Java API类库
  • 来自商业机构和开源社区的第三方Java类库

图1-2展现了Java技术体系所包含的内容,以及JDK和JRE所涵盖的范围。架构

在这里插入图片描述

以上是根据各个组成部分的功能来进行划分的,若是按照技术所服务的领域来划分,或者说按照Java技术关注的重点业务领域来划分,Java技术体系能够分为4个平台,分别为:并发

  • Java Card : 支持一些Java小程序( Applets ) 运行在小内存设备(如智能卡)上的平台。
  • Java ME ( Micro Edition ) : 支持Java程序运行在移动终端(手机、 PDA ) 上的平台,对 Java API有所精简,并加入了针对移动终端的支持,这个版本之前称为J2ME。
  • Java SE ( Standard E d i t i o n ) : 支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,这个版本之前称为J2SE。
  • Java EE ( Enterprise Edition): 支持使用多层架构的企业应用(如ERP、CRM应用)的 Java平台,除了提供Java SE API外 ,还对其作了大量的扩充- 并提供了相关的部署支持,这 个版本之前称为J2EE。

Java发展史

从第一个Java版本诞生到如今已经有18年的时间里。沧海桑田一瞬间,转眼18年过去了,在图1-3所展现的时间线中,咱们看到JDK已经发展到了1.7版。在这18年里还诞生了无数和Java相关的产品、技术和标准。如今让咱们走入时间隧道,从孕育Java语言的时代开始,再来回顾一下Java的发展轨迹和历史变迁。

在这里插入图片描述

具体能够参考个人这篇博客Java发展历程

Java虚拟机发展史

上一节咱们从整个Java技术的角度观察了Java技术的发展,许多Java程序员都会潜意识地把它与Sun公司的HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和 IBM J9 ,但对JVM的认识不只仅只有这些。

从1996年初Sun公司发布的JDK 1.0中所包含的Sun Classic VM到今天,曾经涌现、浬灭过许多或经典或优秀或有特点的虚拟机实现,在这一节中,咱们先暂且把代码与技术放下,一 起来回顾一下Java虚拟机家族的发展轨迹和历史变迁。

  1. Sun Classic / Exact VM
  2. Sun HotSpot VM
  3. Sun Mobile-Embedded VM / Meta-Circular VM
  4. BEA JRockit / IBM J9 VM
  5. Azul VM / BEA Liquid VM
  6. Apache Harmony / Google Android Dalvik VM
  7. Microsoft JVM 及其余

展望Java技术的将来

在2005年,Java语言诞生10周年的SunOne技术大会上,Java语言之父James Gosling作了一场题为"Java技术下一个十年"的演讲。笔者不具有James Gosling博士那样高屋建瓴的视角 ,这里仅从Java平台中几个新生的但已经开始展示出蓬勃之势的技术发展点来看一下后续 1〜2个JDK版本内的一些颇有但愿的技术重点。

  1. 模块化,模块化是解决应用系统与技术平台愈来愈复杂,愈来愈庞大而产生的一系列问题的一个重要途径。最近几年OSGI技术的迅速发展正说明了经过模块化实现按需部署,下降复杂性和维护成本的需求是至关迫切的。
  2. 混合语言,今年原来越多语言运行在Java这个平台上,例如Groovy,JRuby,Clojure等。试想一下,在一个项目中,并行处理使用Clojure语言编写,展现层使用Jruby或Rails,中间层则是Java,每一个应用层将使用不一样的语言来完成,并且,接口对每一层的开发都是透明的,各类语言之间的交互不存在任何困难,由于它们最终都运行在一个虚拟机上。
  3. 多核并行,引入java.util.concurren包,可以轻松地利用多个CPU核心提供的计算资源完成一个复杂的计算任务。
  4. 进一步丰富语法,JDK不断升级改进语法
  5. 随着主流的CPU开始支持64位架构,JAVA虚拟机也在很早以前就推出了支持64位系统的版本

实战:本身编译JDK

想要一探 JDK 内部的实现机制,最便捷的路径之一就是本身编译一套 JDK 。经过阅读和跟踪调试 JDK 源码去了解 Java 技术体系的原理,虽然门槛会高一些,但确定会比阅读各类文章、书籍更加容易切近本质。另外,JDK 中的不少底层方法都是 Native 的,当须要跟踪这些方法的运做或对 JDK 进行 Hack 的时候,都须要编译一套本身的 JDK 。

本章小结

本章介绍了 Java 技术体系的过去、如今和将来的发展趋势,并经过实践的方式介绍了如何本身来独立编译一个 OpenJDK 7。