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

读书是一种跟大神的交流。阅读《深入理解Java虚拟机》受益匪浅,对Java虚拟机有初步的认识。这里写博客主要出于以下三个目的:一方面是记录,方便日后阅读;一方面是加深对内容的理解;一方面是分享给大家,希望对大家有帮助。

《深入理解Java虚拟机》全书总结如下:

序号 内容 链接地址
1 深入理解Java虚拟机-走近Java https://blog.csdn.net/ThinkWon/article/details/103804387
2 深入理解Java虚拟机-Java内存区域与内存溢出异常 https://blog.csdn.net/ThinkWon/article/details/103827387
3 深入理解Java虚拟机-垃圾回收器与内存分配策略 https://blog.csdn.net/ThinkWon/article/details/103831676
4 深入理解Java虚拟机-虚拟机执行子系统 https://blog.csdn.net/ThinkWon/article/details/103835168
5 深入理解Java虚拟机-程序编译与代码优化 https://blog.csdn.net/ThinkWon/article/details/103835883
6 深入理解Java虚拟机-高效并发 https://blog.csdn.net/ThinkWon/article/details/103836167

文章目录

  • 概述
  • Java技术体系
  • Java发展史
  • Java虚拟机发展史
  • 展望Java技术的未来
  • 实战:自己编译JDK
  • 本章小结

世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的程。

概述

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

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

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

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。

深入理解Java虚拟机-走近Java相关推荐

  1. 深入理解 Java 虚拟机——走近 Java

    1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于 嵌入式 ...

  2. 《深入理解Java虚拟机》Java内存区域与内存溢出异常

    <深入理解Java虚拟机>Java内存区域与内存溢出异常 参考文章: (1)<深入理解Java虚拟机>Java内存区域与内存溢出异常 (2)https://www.cnblog ...

  3. Java虚拟机 和 java虚拟机下的进程

    一.什么是Java虚拟机      当你谈到Java虚拟机时,你可能是指:      1.抽象的Java虚拟机规范      2.一个具体的Java虚拟机实现      3.一个运行的Java虚拟机实 ...

  4. java虚拟机原理(java虚拟机的基本结构)

    虚拟机的分类 虚拟机大体上分为系统虚拟机和程序虚拟机: 如:大名鼎鼎的VMware就属于系统虚拟机,VMware是完全对物理计算机的仿真,提供一个可以运行完整操作系统的软件平台: 程序虚拟机的代表就是 ...

  5. Java虚拟机规范 Java SE 8版 - class文件格式(二)

    Java虚拟机规范 Java SE 8版 - class文件格式(二) 4.5 字段 4.6 方法 4.7 属性 4.7.1 自定义和命名新的属性 4.7.2 ConstantValue 属性 4.7 ...

  6. [Java学习探讨]为什么学Java虚拟机的Java程序员更有价值?

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 [Java学习探讨]为什么学Java虚拟机的Java程序员更值钱? 曾经的我经常害怕处理与JVM相关的异常,对JVM的配置参数也一无 ...

  7. Java虚拟机规范 Java SE 8版 - class文件格式(一)

    Java虚拟机规范 Java SE 8版 - class文件格式(一) 4.1 ClassFile 结构 4.2 各种名称的内部表示形式 4.2.1 类和接口的二进制名称 4.2.2 非限定名 4.3 ...

  8. 0x00000000指令引用的内存不能为written_「深入Java虚拟机」Java内存区域与内存溢出...

    内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈 ...

  9. java虚拟机系列:java虚拟机内存模型

    java内存模型,分为程序计数器,虚拟机栈,本地方法栈,java堆,java栈.根据受访的权限不同设置,可以分为线程共享和线程私有.线程共享指可以允许所有的线程共享访问的一类内存区域,包括堆内存区,方 ...

最新文章

  1. 2021年大数据Flink(三十三):​​​​​​​Table与SQL相关概念
  2. 微软服务器迁移工具,在 Azure Migrate 中添加迁移工具 - Azure Migrate | Microsoft Docs
  3. 【 English 】计算机常用英文单词
  4. 下载安装tomcat6.0
  5. Three.js中实现点击按钮添加删除旋转立方体
  6. tps协议和onvif协议_做监控的你,应该了解的ONVIF协议!
  7. ZOJ -3203 三分+数学
  8. 高德服务单元化方案和架构实践
  9. java private是什么_java private 干什么用
  10. bootstrap下的双选时间插件使用方法
  11. 一文带你入门知识图谱多跳问答
  12. C++_虚函数的实现的基本原理
  13. Android Sophix热修复集成
  14. LWN:32位Linux的未来!
  15. 图灵超算工作站UltraLAB GT400M上市
  16. Capture Modules 车载网络报文捕获(监听)模块(低时延、802.1AS时钟同步)
  17. 给二维码加密,防止内部资料外泄
  18. Recurrent Neural Network(循环神经网络)
  19. [智能硬件]是什么?智能硬件应用领域包括哪些?
  20. 小米笔记本重装系统后触摸板失灵 的原因之一

热门文章

  1. 微信小程序部分知识点总结
  2. 教师资格证计算机科目有哪些内容,中学教师资格证的具体考试科目都有哪些?...
  3. linux Fcitx5
  4. 使用Git下载项目到本地
  5. 数据分析的意义和方法
  6. vue项目 乐橙云 轻应用直播SDK imouplayer.js
  7. 逆向——企业微信根据手机号查微信用户信息并添加好友
  8. The development server returned response error code: 404的解决方案
  9. 区块链每周看点 | TokenInsight
  10. 2020我的计划(学期计划)