JVM学习(一)

目录

一、概述

1、官方JVM简介

2、JVM的架构模型

3、JVM的生命周期

虚拟机的启动

虚拟机的执行

虚拟机的退出

4、JVM发展历程

Sun Classic VM

Exact VM

Sun HotSpot VM

BEA公司的JRockit

IBM公司的J9

TaobaoJVM


一、概述

TIOBE语言热度排行榜,每个月都会更新编程语言排行榜。

 世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言。

Oracle官网,找到Java Downloads,Online Documentation-->Java Language and Virtual Machine Specifications--->找到相应版本自己进行下载JVM官方规范文档Java Language and Virtual Machine Specifications

The Java® Virtual Machine Specification

1、官方JVM简介

1.2. The Java Virtual Machine
The Java Virtual Machine is the cornerstone of the Java platform. It is the component
of the technology responsible for its hardware- and operating system-independence, 
the small size of its compiled code, and its ability to protect users from malicious
programs.

The Java Virtual Machine is an abstract computing machine. Like a real computing 
machine, it has an instruction set and manipulates various memory areas at run time. 
It is reasonably common to implement a programming language using a virtual machine; 
the best-known virtual machine may be the P-Code machine of UCSD Pascal.

The first prototype implementation of the Java Virtual Machine, done at Sun 
Microsystems, Inc., emulated the Java Virtual Machine instruction set in software 
hosted by a handheld device that resembled a contemporary Personal Digital Assistant
(PDA). Oracle's current implementations emulate the Java Virtual Machine on mobile, 
desktop and server devices, but the Java Virtual Machine does not assume any particular 
implementation technology, host hardware, or host operating system. It is not inherently 
interpreted, but can just as well be implemented by compiling its instruction set to 
that of a silicon CPU. It may also be implemented in microcode or directly in silicon.

The Java Virtual Machine knows nothing of the Java programming language, only of a 
particular binary format, the class file format. A class file contains Java Virtual
Machine instructions (or bytecodes) and a symbol table, as well as other ancillary 
information.

For the sake of security, the Java Virtual Machine imposes strong syntactic and
structural constraints on the code in a class file. However, any language with
functionality that can be expressed in terms of a valid class file can be hosted 
by the Java Virtual Machine. Attracted by a generally available, machine-independent
platform, implementors of other languages can turn to the Java Virtual Machine as a
delivery vehicle for their languages.

The Java Virtual Machine specified here is compatible with the Java SE 18 platform,
and supports the Java programming language specified in The Java Language 
Specification, Java SE 18 Edition.

跨语言的平台JVM

      随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。

      Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心"字节码"文件。也就是说Java虚拟机拥有语言无关性,并不会单纯地与Java语言“终身绑定”,只要其他语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。

      跨语言的平台JVM使得可以多语言混合编程成为可能或趋势。Java平台上的多语言混合编程正成为主流,通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。

      试想一下,在一个项目中,并行处理用Clojure语言编写,展示层使用JRuby/Rails,中间层则是Java,每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己的语言的原生API一样方便,因为它们最终都运行在一个虚拟机上。

如何真正搞懂JVM?

最好的方式是自己动手编写一个。书<自己动手写Java虚拟机>

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

Java虚拟机

Java虚拟机是一台执行Java字节码的虚拟机计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。

JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回收器,以及可靠的即时编译器。

Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),因为所有的Java程序都运行在Java虚拟机内部。

Java虚拟机就是二进制字节码的运行环境。

JVM是运行在操作系统之上,它与硬件没有直接的交互。

2、JVM的架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构

Java JVM采用栈的指令集架构。

栈的指令集架构与寄存器的指令集架构的区别?

栈式架构的特点:设计和实现更简单,适用于资源受限的系统。使用零地址指令方式分配。指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。不需要硬件支持,可移植性更好,更好实现跨平台。

寄存器架构的特点:指令集架构完全依赖硬件,可移植性差。性能优秀和执行更高效。使用一地址指令、二地址指令和三地址指令。

栈:跨平台性、指令集小、指令多:执行性能比寄存器差。

3、JVM的生命周期

虚拟机的启动-->虚拟机的执行-->虚拟机的退出

虚拟机的启动

Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的执行

一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。

程序开始执行时它才运行,程序结束时它就停止。

执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

虚拟机的退出

有如下的几种情况:

1、程序正常执行结束

2、程序在执行过程中遇到了异常或错误而异常终止

3、由于操作系统出现错误而导致Java虚拟机进程终止

4、某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。

5、JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况。

4、JVM发展历程

所有虚拟机的原则:一次编译,到处运行。

Sun Classic VM

早在1996年Java1.0版本的时候,Sun公司发布了一款名为Sun Classic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。

这款虚拟机内部只提供解释器。

如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统。解释器就不再工作。解释器和编译器不能配合工作。

现在Hotspot内置了此虚拟机。

Exact VM

为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机。

Excat Memory Management:准确式内存管理,也可以叫Non-Conservative/Accurate Memory Management。虚拟机可以知道内存中某个位置的数据具体是什么类型。

具备现代高性能虚拟机的雏形:热点探测   编译器与解释器混合工作模式

只在Solaris平台短暂使用,其他平台上还是Classic VM。终被Hotsport虚拟机替换。

Sun HotSpot VM

HotSpot 历史:最初由一家为“Longview Technologies”的小公司设计。1997年,此公司被Sun收购;2009年,Sun公司被甲骨文收购。JDK1.3时,HotSpot  VM成为默认虚拟机。

目前HotSpot 占有绝对的市场地位,不管是JDK6,还是JDK8中,默认的虚拟机都是HotSpot。

Sun/Oracle JDK和OpenJDK的默认虚拟机

名称中的HotSpot 指的就是它的热点代码探测技术。通过计数器找到最具编译价值代码,触发即时编译或栈上替换。通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡。

BEA公司的JRockit

专注于服务器端应用:它可以不太关注程序的启动速度,因此JRockit内部不包含解释器实现,全部代码都靠即时编译器编译后执行。

大量的行业基准测试显示,JRockit JVM是世界上最快的JVM。使用JRockit产品,客户已经体验到了显著的性能提高和硬件成本的减少。

2008年,BEA被Oracle收购。

Oracle表达了整合两大优秀虚拟机的工作,大致在JDK 8中完成。整合的方式是在HotSpot的基础上,移植JRockit的优秀特性。

IBM公司的J9

全程:IBM Technology for Java Virtual Machine,简称IT4J,内部代号:J9

市场定位与HotSpot接近,服务器端、桌面应用、嵌入式等多用途VM

广泛用于IBM的各种Java产品。

目前,有影响力的三大商用虚拟机之一,也号称是世界上最快的Java虚拟机。

2017年左右,IBM发布了开源J9 VM,命名为OpenJ9,交给Eclipse基金会管理,也称为 Eclipse OpenJ9.

TaobaoJVM

由AliJVM 团队发布。基于OpenJDK 开发了自己的定制版本AlibabaJDK,简称AJDK。

基于OpenJDK HotSpot VM发布的国内第一个优化、深度定制且开源的高性能服务器版Java虚拟机。创新的GCIH(GC invisible heap)技术实现了off-heap,即将生命周期较长的Java对象从heap中移到heap之外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的。

GCIH中的对象还能在多个Java虚拟机进程中实现共享

JVM学习(二)--类加载器子系统

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

今天多学一份本事,明天少说一句求人的话。

勿在浮沙之上筑高台

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杀神lwz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值