JVM学习笔记(2) 第一部分 走近java 第1章 走近java

文章目录

  • [第1章 走近java](#第1章 走近java)
    • [0.0 个人感悟](#0.0 个人感悟)
    • [1.1 概述](#1.1 概述)
    • [1.2 Java技术体系](#1.2 Java技术体系)
      • [1.2.1 按组成部分](#1.2.1 按组成部分)
      • [1.2.2 按业务线](#1.2.2 按业务线)
    • [1.3 Java发展史](#1.3 Java发展史)
    • [1.4 Java虚拟机家族](#1.4 Java虚拟机家族)
    • [1.5 展望Java技术的未来](#1.5 展望Java技术的未来)
      • [1.5.1 无语言倾向](#1.5.1 无语言倾向)
      • [1.5.2 新一代即时编译器](#1.5.2 新一代即时编译器)
      • [1.5.3 向Native迈进](#1.5.3 向Native迈进)
      • [1.5.4 灵活的小胖子](#1.5.4 灵活的小胖子)
      • [1.5.5 语法持续增强](#1.5.5 语法持续增强)
    • [1.6 实战:自己编译JDK](#1.6 实战:自己编译JDK)
    • [1.7 扩展知识补充](#1.7 扩展知识补充)
      • [1.7.1 即时编译和提前编译](#1.7.1 即时编译和提前编译)

第1章 走近java

世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本身就是一个不断追求完美的过程。 -- 《深入理解Java虚拟机 第3版》

0.0 个人感悟

  • 追赶,学无止境,当然也量力而行
    • Java1.0诞生于1996
    • 《深入理解Java虚拟机》第1版出版于2011
    • 第2版出版于2013
    • 第3版出版于2020
    • 截止到当前时间,JDK最新版是JDK26,GA版本于2026.3.17正式发布
  • 技术发展,时代变迁
    技术组织之间有合作也有竞争
    JVM的实现百家争鸣,很多很多都泯灭于时间长河,但是存在过,努力过
  • 书读多遍,
    一次看不明白可以记录下来回头再看,也许随着学习豁然开朗
  • 保持活力,拥抱变化才能长久
    java的成功,有时代的因素,更离不开设计者、主导者能够不断地接受变化,迎接挑战
  • 学习的快乐
    当时学java其实也是市场使然,就业使然。书中有句话"通常情况下,一个程序员只要了解了必要的Java类库API、Java语法,学习适当的第三方开发框架,就已经基本满足日常开发的需要了"。 哈哈 这说的就是工作前几年的自己,现在想想真有些不思进取Q.Q

1.1 概述

java是由一系列计算机软件和规范组成的技术体系,应用广泛。

优点:

  • 结构严谨,面向对象
  • 跨平台,"wirte once, run anywhere"
  • 自动内存管理和访问机制,避免了绝大多数的内存泄漏和指针越界问题
  • 热点代码检测和运行时编译优化
  • 类库完善,社区活跃,三方库多
    这章不涉及具体技术内存,总控性介绍java技术体现的内容,过去现在和未来的发展趋势。

1.2 Java技术体系

1.2.1 按组成部分

广义:Kotlon、Clojure、JRuby、Groovy等运行于Java虚拟机上的编程语言及其相关的程序都属于Java技术体系。

传统意义:JCP(Java Community Process,Java社区)官方规定Java技术体系组成部分如下

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

JDK(Java Development Kit 支持Java程序开发多的最小环境):

  • Java程序设计语言
  • Java虚拟机
  • Java类库

JRE(Java Runtime Environment 支持Java程序运行的标准环境):

  • Java虚拟机
  • Java SE API子集
    图更清楚:

1.2.2 按业务线

  • Java Card: 支持java小程序(Applets)运行在小内存设备(如智能卡)上的平台
  • Java ME(Micro Edition):支持移动端(手机、PDA)平台。JDK6前叫J2ME
  • Java SE(Standard Edition): 支持桌面应用的平台。JDK6前叫J2SE
  • Java EE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、MIS)。JDK6前称J2EE,在JDK10以后被Oracle放弃,捐献给Elipse基金会管理,此后被称为Jakarta EE

1.3 Java发展史

几个关键节点

  • 1991.4 语言前身,起源于James Gosling博士的一项计划,名叫Oak(得名于James Gosling办公室外的一棵橡树)
  • 1995.5.23 Oak改名Java,在SunWorld大会上正式发布Java1.0版本,提出"Write Once,Run Anywhere"口号
  • 1996.1.23 JDK1.0发布
  • 2006.11.13 Sun公司宣布Java开源
  • 2009.4.20 Oracle宣布收购Sun公司,该交易于2010.1底正式完成
    有兴趣可以看看原书

1.4 Java虚拟机家族

  • 虚拟机始祖:Sun Classic/Exact VM
    JDK1.0自带的虚拟机便是Classic VM。JDK1.2时曾发布过一款Exact VM,解决Classic面临的性能慢等问题。JDK1.2时,Classic VM与HotSpot并存,可以配置切换,但默认是Classic VM,JDK1.4时Classic功成身退。Exact VM并没有商用,被Hot Spot取代。
  • 武林盟主: HotSpot VM
    经典霸主,不断演进,一直沿用至今。期初并非Sun公司设计,而是一家名为"Longview Technologies"小公司设计,甚至最初并非为java专门设计的。
  • 小家碧玉:Mobile/Embedded VM
    Sun/Oracle公司对移动和嵌入式发行的Java虚拟机。
  • 天下第二:BEA JRockit/IBM J9 VM
    曾与HotSpot并称"三大商业Java虚拟机"的另外两位:BEA System公司的JRockit和IBM公司的IBM J9
  • 软硬合璧: BEA Liquid VM/Azul VM
    与特定硬件平台绑定、软硬配合工作的虚拟机代表
  • 挑战者:Apache Harmony/Google Andrid Dalvik VM
    这两款虚拟机以及背后所代表的技术体系曾对Java世界产生了非常大的影响和挑战
  • 没有成功,但并非失败:Microsoft JVM及其它
    除了很多大规模商用的Java虚拟机外,还有很多默默无闻或者昙花一现的,以Mircrosoft JVM为代表。当然其中还有sun公司和微软的瓜,有兴趣可以看看
  • 百家争鸣
    还有很多虚拟机,设计之初就没有抱着商用目的,仅用于研究、验证某些观点

1.5 展望Java技术的未来

Java面临机遇与挑战,未来能否壮大,某种程度上取决于如何应对当下已出现的挑战

1.5.1 无语言倾向

2018.04 Oracle Labs公开了黑科技Graal VM,口号"Run Programs Faster Anywhere",旨在作为跨语言全站虚拟机。这无疑在撼动HotSpot虚拟机的地位。

最新消息,截止到最新的JDK25,HotSpot仍一直作为JDK默认虚拟机,中间也出现了很多挑战者,好在有惊无险。

1.5.2 新一代即时编译器

HotSpot有两个即时编译器,相互配合构成虚拟机执行子系统

C1:编译耗时短单输出代码优化程度较低的客户端编译器

C2:编译时间长但输出代码优化质量更高的服务端编译器

JDK10起,引入Graal编译器,作为C2编译器的替代。未来可期。

最新消息,2025年9月,Oracle GraalVM for JDK 24 是最后一个将Graal JIT编译器作为可选组件包含在Oracle JDK产品中的版本,也就是说,从JDK 24之后,Oracle决定不再在它的标准JDK发行版中发展和支持Graal JIT编译器,并建议使用Graal JIT的用户迁移回标准的C2编译器。

1.5.3 向Native迈进

传统Java(基于HotSpot JVM)在设计之初是为了长时间运行、计算密集型服务器应用服务的,这与云原生环境对轻量、快速、弹性的要求产生了冲突。

Java在应对过程中革命性地举措便是提供了GraalVM,实现提前编译。

最新消息,JAVA AOT这条路目前还在稳健进行,适应云原生。

1.5.4 灵活的小胖子

HotSpot诞生到现在二十多年了,经历过无数的功能添加、改进、重构和开发,虽代码复杂度还在增加,但从时间的侵蚀中挣脱出来!

1.5.5 语法持续增强

社区活跃,语法博采众长并经常更新到新版JDK中。

1.6 实战:自己编译JDK

大家有兴趣可以自行了解了解

1.7 扩展知识补充

1.7.1 即时编译和提前编译

编译器的作用:

将高级语言(java python等)转换成计算机能够理解的语言(机器语言),同时可以进行很多优化。

即时编译(JIT Just-In-Time compilation) :

边跑边译。对java而言,在运行时期,将java字节码(.class)文件翻译成当前平台的机器码,这也是为什么java能编写一次到处运行,对于源码就一份,然后不同平台的JVM负责翻译。

  • 优点 性能自适应;对反射等动态功能支持的好;移植性好
  • 缺点 启动慢、预热长;内存占用高;

提前编译(Ahead-Of-Time compilation)

先译后跑。对Java而言,在构建时就将字节码直接翻译成机器码,执行阶段直接执行。

  • 优点 启动快;内存占用小
  • 缺点 优化保守;动态性受限;移植性相对较差,构建时需与平台绑定
相关推荐
jinanmichael2 小时前
【SQL】掌握SQL查询技巧:数据分组与排序
java·jvm·sql
敲代码的嘎仔2 小时前
Java后端开发——Redis面试题汇总
java·开发语言·redis·学习·缓存·面试·职场和发展
YmaxU2 小时前
SpringAIAlibaba学习使用 ---核心API、RAG、Tool Calling
java·学习·spring·ai
敲敲千反田2 小时前
深入了解JVM
jvm
冬夜戏雪2 小时前
实习面经摘录(七)
学习
AMoon丶2 小时前
C++基础-类、对象
java·linux·服务器·c语言·开发语言·jvm·c++
星幻元宇VR2 小时前
沉浸式体验:VR交通安全学习机的教育魅力
科技·学习·vr·虚拟现实
醇氧2 小时前
Spring AI Alibaba 学习(一) 集成阿里云百炼大模型应用
java·学习·spring
Nan_Shu_6142 小时前
学习: 尚硅谷Java项目之小谷充电宝(4)
学习