JVM高并发学习第一章

1. JVM基础和入门

1.1 java从代码到执行的过程

JVM高并发学习第一章_第1张图片

分为两个部分:

部分一:javac部分 将源代码文件通过javac的指令生成相应的class文件

部分二:java部分 class文件通过classLoader加载内存中,还需支持相应的java类库 比如说String.class或是Object.class。调用字节码解释器或者JIT即时编辑器,来进行解释和编译,编译之后会由执行引擎开始执行,执行引擎对应的就是操作系统和硬件,我们可以把这个java指令的部分的流程看成JVM。

字节码解释器和JIT即时编辑器

其实两者是可以混合的,针对特别常用的代码,会把代码做成一种即时编译的,需要本地的支持,那么在下次使用的时候就不需要解释器对代码一行一行的解释执行。执行引擎可以将代码直接交给操作系统,让其进行调用。这个效率要高很多,当然也不是说所有的代码都要被JIT即时编译器执行。java是一个跨平台的语言,如果他是即时编译的话,那么就满足不了跨平台的特点

1.2 从跨平台的语言,到跨语言的平台

跨平台的语言 ---- Java

跨语言的平台 ---- JVM

除了Java语言,JVM还支持很多其他的语言,根据调查显示大概支持100多种语言。这些语言都可以在JVM虚拟机上进行执行。

JVM高并发学习第一章_第2张图片

其实JVM他就是一种规范。它帮我们屏蔽了操作系统的底层,包括Linux、Unix、Windows等操作系统。

那么JVM如何决定其他语言可以在JVM上执行呢?

JVM高并发学习第一章_第3张图片

任何语言,只要能够生成class文件,那么他就能够在JVM上执行。

如果没有class文件生成,可以通过程序内部编译生成类似的class文件的二进制流,那么也是可以在JVM上执行的。所以JVM和Java其实没有任何关系的。

究竟什么是跨平台,就是我们在编写Java程序时,可以在Linux、Unix、Windows等等操作系统上执行,且不需要修改东西。以前的c语言和c++都是做不到的。

JVM是一种规范,定义了Java虚拟机能够执行什么,那么这种规范是如何进行定义的。

JVM官方文档网址:https://docs.oracle.com/javase/specs/.index.html

https://docs.oracle.com/en/java/javase/15/

JVM高并发学习第一章_第4张图片

JVM高并发学习第一章_第5张图片

The Java Language Specification, Java SE 18 Edition

The Java Virtual Machine Specification, Java SE 18 Edition

虚拟机是虚拟出来的机器

内存的管理,堆栈方法区等 ---- 我们后面再说。。。

1.3 常见的JVM的实现

HotSpot — Oracle官方 我们做实验用到最多的 通过Java-version指令查看安装的JVM是哪种实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7rVuW5z-1649499089103)(C:UsersLenovoAppDataRoamingTypora	ypora-user-imagesimage-20220409173452942.png)]

JROKit — BEA 曾经号称世界上最快的JVM,后来被Oracle收购,与HotSpot合并

J9 — IBM

Microsoft VM — Microsoft

J9Microsoft VM都是大厂商出产,不会依赖oracle的东西(技术),他们有自己的平台,因为版本问题,他们都去自己开发平台。

TaobaoVM — HotSpot定制版 淘宝专属定制,阿里天猫都在使用这款虚拟机

LiquidVM 直接针对硬件 它其实是没有操作系统的,运行效率会更高

Azul zing GC 垃圾回收机制的业界标杆,它的垃圾回收在1ms以内 土豪版本,价格相当昂贵 常用于银行、电信

阿里有10人以内可以做JVM开发 p9-p10-p11级别
网传Java收费问题:在HotStop8版本以后将不再提供升级了,如果要升级到更高版本则需要收费,是根据企业去做的商业行为,与开发者关系不大。

JDK、JRE以及JVM的关系

JVM高并发学习第一章_第6张图片

JVM(Java Virtual Machine):虚拟机 用于执行class文件 来执行程序的

JRE(Java RunTime Enviroment):Java运行时环境 除了虚拟机以外还需要Java的核心包、Java的类库要进行加载,能够支持Java的运行

JDK(Java Development Kit):Java的开发工具包,支持Java程序的运行以及编译 JRE+JVM

你可能感兴趣的:(java,jvm,学习,java,数据库,spring)