JVM

JVM与Java体系结构(一)

Java及JVM简介

Java生态圈

Java是目前应用最为广泛的软件开发平台之一,随着Java以及Java社区的不断壮大,Java也早已不再是简简单单的一门计算机语言了。它更是一个平台、一种文化、一个社区。

  • 作为一个平台,Java虚拟机扮演者举足轻重的作用。Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分。
  • 作为一种文化,Java已经成为了开源的代名词。有许多第三方开源软件和框架。例如Tomcat、Mybatis、Spring等。就连JDK和JVM自身也有不少开源实现,如OpenJDK、Harmony。
  • 作为一个社区,Java拥有全世界最多的技术拥护者和开源社区支持,有数不清的论坛和资料。从桌面应用软件、嵌入式开发到企业级应用、后台服务器、中间件,都可以看到Java的身影。其应用形式之复杂、参与人数之多也令人咋舌。

JVM:跨语言的平台

  • 随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机上运行非Java语言编写的程序。
  • Java虚拟机根本不关心运行在其内部的程序到底是使用何种语言编写的,它只关心字节码文件。也就是说Java虚拟机具有语言无关性,并不会单纯的与Java语言“终身绑定”,只要其它语言的编译结果满足包含虚拟机的内部指令集、符号以及其它辅助信息,它就是一个有效的字节码文件,就能够被虚拟机识别并装载运行。

Java发展的重大事件

  • 1990年,在Sun公司中,由Patrick Naughton、MikeSheridan及James Gosling领导的Green Team开发出的新的程序语言,命名为Oak,后期命名为Java。
  • 1995年,Sun公司正式发布Java和HotSpot产品,Java首次公开亮相。
  • 1996年1月23日MicroSystems发布了JDK1.0。
  • 1998年,JDK1.2版本发布。同时,Sun发布了JSP/Servlet、EJB规范,以及将Java分为了J2EE、J2SE、J2EE。这表明了Java开始向企业、桌面应用和移动设备应用3大领域进军。
  • 2000年,JDK1.3发布,Java HotSpot Virtual Machine正式发布,成为Java的默认虚拟机。
  • 2002年,JDK1.4发布,古老的Classic虚拟机退出历史舞台。
  • 2003年底,Java平台的Scala正式发布,同年Groovy也加入了Java阵营。
  • 2004年,JDK1.5发布。同时JDK1.5改名为Java SE5.0。
  • 2006年,JDK6发布。同年Java开源建立了Open JDK。顺利成章,HotSpot虚拟机也成为了Open JDK中的默认虚拟机。
  • 2007年,Java平台迎来了新的伙伴Clojure。
  • 2008年,Oracle收购了BEA,得到了JRockit虚拟机。
  • 2009年,Twitter宣布把后台大部分程序从Ruby迁移到Scala,这是Java平台的又一次大规模应用。
  • 2010年,Oracle收购了Sun,获得Java商标和最具有价值的HotSpot虚拟机。此时,Oracle拥有市场占有率的两款的虚拟机HotSpot和JRockit,并计划在未来对它们进行整合:HotRockit。
  • 2011年,JDK7发布。在JDK1.7u4中,正式启用了新的垃圾回收器G1。
  • 2017年,JDK9发布.将G1设置为默认GC,替代CMS。
  • 2018年,Android的Java侵权案判决,Google赔偿了Oracle共计88亿美元。
  • 同年,Oracle宣布Java EE成为历史名词,JDBC、JMS、Servlet赠与Eclipse基金会。
  • 同年,JDK11发布,LTS版本的JDK,发布革命性的ZGC,调整JDK的授权许可。
  • 2019年,JDK12发布,加入RedHat领导开发的Shenandoah GC。

虚拟机与Java虚拟机

所谓的虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟机指令。大体上可以分为系统虚拟机1和程序虚拟机2。无论是系统虚拟机还是程序虚拟机,在上面的运行的软件都被限制于虚拟机提供的资源中。

  • Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,但是很重要的一点在于:其运行的Java字节码也就是我们常说的.class文件并不一定是由Java语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回收器,以及可靠的即时编译器。可以说Java技术的核心就是Java虚拟机,因为程序所有的Java程序都运行在Java虚拟机内部。
  • Java虚拟机就是二进制字节码的运行环境,负责装载字节码到内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,《Java虚拟机规范》中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放到哪里。其特点在于:一次编译,处处运行;自动内存管理;自动垃圾回收功能。

  1. 大名鼎鼎的Visual Box、VMware就属于系统虚拟机,它们完全是对物理计算机的访问,提供一个可运行的操作系统的软件平台。 ↩︎

  2. 程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值