初识JVM

初识JVM

一、概述
  1. Java不仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统,移动终端、企业服务器、大型机等场合。

  2. 它提供了一种相对安全的内存管理和访问机制,避免了绝大部分内存泄漏和指针越界。

  3. 它实现了热点代码检测和运行时编译及优化

  4. 它有一套完整的应用程序接口

二、Java技术体系
##### Java体系包含:

Java程序设计语言

各种硬件平台上的Java虚拟机实现

Class文件格式

Java类库的API

来自商业机构及开源社区的第三方Java类库
  1. JDK

    包含 Java程序设计语言、Java虚拟机、Java类库,是支持Java程序开发的最小环境

  2. JRE

    Java类库API中的JavaSE API子集和Java虚拟机,是支持Java程序运行的标准环境

  3. 四条主要的产品线

    Java Card:支持Java小程序(Applets)运行在小内存设备上的平台

    Java ME:支持Java程序运行在移动终端

    Java SE:支持面向桌面级应用的Java平台

    Java EE:支持使用多层架构的企业应用的Java平台

三、Java发展史
  1. 1991年4月,James Gosling 博士领导的绿色计划(Green Project)启动,目标是开发能够在各种消费电子品上运行的程序架构,Oak。

  2. 1995年5月23日,Oak语言改名为Java,并在SunWorld大会上正式发布Java1.0,提出“Write Once,Run Anywhere”

  3. 1996年1月23日,JDK1.0发布,java语言有了第一个正式版本的运行环境

  4. 1996年5月底,Sun公司于美国旧金山举行首届JavaOne大会

  5. 1997年2月19日,

    Sun公司发布JDK1.1,提出了JDBC、JAR文件格式、JavaBeans、RMI。Java语法增加了内部类和反射。

  6. 1998年12月4日,JDK发布里程碑式版本1.2,Sun将Java技术体系拆分为三个方向:J2SE、J2EE、J2ME

    JDK1.2首次内置了JIT(即时编译器),Java语言添加了strictfp关键字、Collections集合

  7. 1999年4月27日,HotSpot虚拟机诞生。

  8. 2000年5月8日,JDK1.3发布,从此之后的所有JDK全部使用HotSpot虚拟机。

  9. 2002年2月13日,JDK1.4发布,是Java真正走向成熟的一个版本。增添了正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器。

  10. 2004年9月30日,JDK5发布,版本号不再使用1.x。Java语法增添自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等

  11. 2006年12月11日,JDK6发布。JDK6改进:提供初步的动态语言支持、提供编译器注解处理器和微型HTTP服务器API。HotSpot虚拟机中改进了:锁与同步、垃圾收集、类加载等。

  12. 2009年2月19日,JDK7发布,2009年4月20日,Oracle宣布以74亿美元的价格收购市值超过2000亿美元的Sun公司,Java商标正式归Oracle所有。

  13. 2014年3月18日,JDK8发布。改进如下:

    对Lambda表达式的支持

    内置Nashorn JavaScript引擎支持

    新的时间、日期API

    彻底移除HotSpot永久代(方法区)

  14. 2017年9月21日,JDK9发布。增强了若干工具(JS Shell、JLink、JHSDB),整顿了HotSpot各个模块各自为战的日志系统,支持HTTP2客户单API等91个JEP。

  15. 2018年3月20日,JDK10发布。统一源仓库、统一垃圾收集器接口、统一即时编译器接口等。

  16. 2018年9月25日,JDK11发布,这是一个LTS版本的JDK。出现了ZGC革命性的垃圾收集器,Oracle将JDK11之前的商业特性全部开源给OpenJDK,故OpenJDK11和OracleJDK11的代码和功能在本质上完全相同。

  17. 2019年3月20日,JDK12发布,只包含8个JEP,其中主要有Switch表达式、Java微测试套件(JMH)等。

四、Java虚拟机家族
  1. 虚拟机始祖:Sun Classic / Exact VM

    Sun Classic虚拟机是世界上第一款商用Java虚拟机。

    Exact VM:使用了准确式内存管理(Exact Memory Management),可以知道内存中某个位置的数据具体是什么类型。

  2. 武林盟主:HotSpot VM

    准确式内存管理

    热点代码探测技术:可以通过执行计数器找到最具有编译价值的代码。

  3. 其它等等

五、展望Java未来
  1. 无语言倾向

    Graal VM,也被称为“Universal VM”、“Polyglot VM” ,是一个在HotSpot基础上增强而成的跨语言全栈虚拟机。

    程序特化,将其它语言(C/C++、Python、Javascript等)的源代码或其编译后的中间格式通过解释器转换为能被Graal VM接收的中间表示。Truffle工具集用来快速构建面向一种语言的解释器。

  2. 新一代即使编译器

    HotSpot虚拟机有两个编译器:C1,客户端编译器;C2,服务端编译器

    Graal编译器,用来替代C2,可以有更复杂的优化(如“部分逃逸分析”),更激进的预测性优化

  3. 向Native迈进

    为应对近年来大型单体应用构架转向小型微服务应用构架发展,Java逐步开始对提前编译(AOT)提供支持。

    AppCDS:允许把加载解析后的类信息缓存起来,提升下次启动速度。并在JDK10后,可以面向用户程序的类型信息共享(原先的CDS只面向Java标准库)、无操作的垃圾收集器(Epsilon,只做内存分配而不做回收的的收集器,对于运行完就退出的应用十分合适)。

    Substrate VM:是Graal VM 0.2版本中一个极小型的运行时环境,包括独立的异常处理、同步调度、线程管理、内存管理(垃圾回收)和JNI访问等组件,目标是替代HotSpot用来支持提前编译后的程序执行。同时还包含一个本地镜像的构造器(Native Image Generator),用来给用户程序建立基于Substrate VM的本地运行时镜像。该构造器采用指针分析技术,从用户提供的程序入口,搜索所有可达的代码。其轻量特性,使其十分适合嵌入其它系统,也让Graal VM支持其它语言不会有重量级的运行负担。

  4. 开放性和扩展性

    开放信息监控接口(JVMPI)与调式接口(JVMDI) - - JDK1.4

    开放工具接口(JVMTI),为所有Java虚拟机相关的工具提供本地编程接口集合,并取代JVMPI和JVMDI - - JDK6.0

    开放Java语言级别的编译器接口(JVMCI),可以在JVM外增加或替换即时编译器,Graal编译器就是通过该接口植入HotSpot - - JDK9.0

    重构垃圾收集器接口,统一其内部各款垃圾收集器的公共行为。 - - JDK12.0

  5. 语法持续增强

    提供各种语法糖。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课程简介: 目前,Java是最为流行的编程语言之一,它的基础平台就是JVM。除了Java,如JRuby、Scala、Clojure等语言也运行在JVM平台。熟悉和掌握JVM平台有着重要的实用价值和意义。 在本课程中个,将详细介绍JVM的基本原理、组成以及工作方式,并配合实际案例,介绍相关的调优技巧。 课程大纲: 第一课 初识JVM JVM分类 Java语言规范 JVM规范 介绍JVM的基本知识和发展历史,并介绍了Java语言规范和JVM规范。 第二课 JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及实例讲解 server与client模式 调试跟踪参数 介绍常用的JVM参数,包括内存分配、堆栈分配、虚拟机运行模式以及调试跟踪参数。 第四课 GC的算法和种类 引用计数 标记清除 复制算法 标记压缩 可触及性 本章是理论性较强的一章,主要介绍GC的基本算法和思想,本章作为下一章节的前序课程。 第五课 GC控制参数 Serial ParNew等GC参数 GC的参数搭配实例分析 介绍GC的设置参数,并分析相关的案列。 第六课 类装载 class装载流程 ClassLoader模式 ClassLoader的使用实例分析 热替换例子 详细介绍ClassLoader的原理和应用。分析2个案例,说明ClassLoader的使用。 第七课 性能监控工具 线程死锁分析 OOM分析 介绍常用的JVM诊断和分析工具,并以死锁和OOM为例,展示这些工具的使用。 第八课 分析Java堆 MAT的使用案例 Jvisualvm介绍使用 介绍了Java堆的分析方法,以一个实例为基础,展示对堆的分析过程。 第九课 锁 baise锁 轻量级锁 自旋锁 介绍JVM中对多线程锁的实现。 第十课 class文件结构 ASM库介绍 介绍JVM规范中的最重要的内容——Class文件结构,同时介绍ASM库的使用以及对class文件的修改。 第十一课 字节码执行 案例以及javap JIT及相关参数 介绍JVM的字节码以及反汇编方法,同时介绍JIT相关的参数和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

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

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

打赏作者

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

抵扣说明:

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

余额充值