java虚拟机简介

java虚拟机学习

1.java及jvm简介

我们知道Java源代码,即.java文件,通过javac编译为.class文件。.class文件可以运行在JVM上,JVM底层会通过字节码解释器或者即时编译器(JIT Compiler)执行.class文件中的字节码指令。JVM是运行在操作系统之上的,操作系统又通过指令集调用底层硬件服务执行其上的各种软件。

Java虚拟机(JVM)是由Java虚拟机规范定义的,其上运行的是字节码指令集。这种字节码指令集包含一个字节的操作码(opcode),零至多个操作数(oprand),虚拟机规范明确定义了每种字节码指令完成的功能是什么以及需要多少个操作数。Java虚拟机上运行的class文件,这个文件中包含字节码指令流以及类定义的信息,所以Java虚拟机规范还定义了class文件的格式(精确到每个字节)。所以实现Java虚拟机的两个要素是字节码指令集和class文件格式,Java虚拟机的实现者只要以正确方式读取class文件中的每一条字节码指令,并按照要求实现字节码指令的功能就可以实现JVM。

Java是运行在JVM之上的。但是Java语言和JVM没有必然的联系。Java语言并不是只能运行在JVM之上,只要实现了相应的编译器Java语言就可以运行在任何平台之上(比如J++),也可以被编译为本地代码直接运行在操作系统之上,比如,Linux上的GCJ(GNU Compiler for Java)就可以把Java语言编译为本地代码直接执行。同样的,JVM上也不是只能执行Java语言,只要实现了适当的编译器,将其他语言编译为JVM上的字节码,就可以在JVM上运行。比如,JRuby,Jython以及Groovy等其他JVM语言,都会通过相应的编译器或是解释器转化为.class,然后再JVM上运行。由于JVM并不关心.class文件是由Java、JRuby、Jython等转化而来,只要这个文件结构正确并能通过class文件校验。因此,由于.class文件屏蔽了Java、JRuby等上层语言的差异,所以Java、Groovy等可以相互调用。

2.java发展的重大事件

1990年,在 sun计算机公司中,由Patrick Naughton、Mike Sheridan及James Gosling领导的小组Green Team,开发出的新的程序语言,命名为oak,后期命名为Java
1995年,sun正式发布Java和lHotJava产品,Java首次公开亮相。
1996年1月23日,sun Microsystems发布了JDK 1.0。
1998年,JDK 1.2版本发布。同时,sun发布了JSP/Servlet、EJB规范,以及将Java分成了J2EE、J2SE和J2ME。这表明了Java开始向企业、桌面应用和移动设备应用3大领域挺进。
2000年,JDK 1.3发布,Java HotSpot Virtual Machine正式发布,成为Java的默认虚拟机。
2002年,JDK 1.4发布,古老的classic虚拟机退出历史舞台。
2003年年底,Java平台的scala正式发布,同年Groovy也加入了Java阵营。
2004年,JDK 1.5发布。同时JDK 1.5改名为JavaSE 5.0。
2006年,JDK 6发布。同年,Java开源并建立了OpenJDK。顺理成章,Hotspot虚拟机也成为了openJDK中的默认虚拟机。
2007年,Java平台迎来了新伙伴clojure.
2008年,oracle收购了BEA,得到了JRockit虚拟机。
2009年,Twitter宣布把后台大部分程序从Ruby迁移到scala,这是Java平台的又一次大规模应用。
2010年,oracle收购了sun,获得Java商标和最具价值的HotSpot虚拟机。此时,oracle拥有市场占用率最高的两款虚拟机HotSpot和JRockit,并计划在未来对它们进行整合:HotRockit
2011年,JDK7发布。在JDK 1.7u4中,正式启用了新的垃圾回收器G1。
2017年,JDK9发布。将G1设置为默认GC,替代CMS
同年,IBM的J9开源,形成了现在的open J9社区
2018年,Android的Java侵权案判决,Google赔偿oracle计88亿美元
同年,oracle宣告JavaEE成为历史名词,JDBC、JMS、Servlet赠予Eclipse基金会
同年,JDK11发布,LTS版木的JDK,发布革命性的ZGC,调整JDK授权许可。在JDK11之前,oracleJDK中还会存在一些openJDK中没有的、闭源的功能。但在JDK11中,我们可以认为openJDK利loracleJDK代码实质上已经完全一致的程度。
2019年,JDK12发布,加入RedHat领导开发的Shenandoah GC。

3. 虚拟机和java虚拟机

    1. 虚拟机

    所谓虚拟机(virtual Machine),就是一台虚拟的计算机它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
    大名鼎鼎的Visual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。
    程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。
    无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

    1. Java虚拟机
  1. Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。
  2. JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。
  3. Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine) ,因为所有的Java程序都运行在Java虚拟机内部。
  4. 作用:
    Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

特点:
一次编译,到处运行
自动内存管理
自动垃圾回收功能

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

weixin_41217861

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值