最易懂的JVM之JVM概述和学习规划(1)
JVM概述和学习规划
JVM的前世今生(了解即可)
Hotspot:目前使用的最多的 Java 虚拟机。在命令行 java –version。它会输出你现在使用的虚拟机的名字、版本等信息、执行模式。
Jrocket:原来属于BEA 公司,曾号称世界上最快的 JVM,后被 Oracle 公司收购,合并于 Hotspot
J9: IBM 有自己的 java 虚拟机实现,它的名字叫做 J9. 主要是用在 IBM 产品(IBM WebSphere 和 IBM 的 AIX 平台上)
TaobaoVM: 只有一定体量、一定规模的厂商才会开发自己的虚拟机,比如淘宝有自己的 VM,它实际上是 Hotspot 的定制版,专门为淘宝准备的,阿里、天 猫都是用的这款虚拟机。
LiquidVM: 它是一个针对硬件的虚拟机,它下面是没有操作系统的(不是 Linux 也不是 windows),下面直接就是硬件,运行效率比较高。
zing: 它属于 zual 这家公司,非常牛,是一个商业产品,很贵!它的垃圾回收速度非常快(1 毫秒之内),是业界标杆。它的一个垃圾回收的算法后来被 Hotspot 吸收才有了现在的 ZGC。
注意:Hotspot作为目前使用最多的java虚拟机,以后我们的所有讲解都是按照他来学习的
JVM跨平台与语言无关性(掌握)
跨平台:我们写的一个类,在不同的操作系统上(Linux、Windows、MacOS 等平台)执行,效果是一样,这个就是 JVM 的跨平台性。 为了实现跨平台型,不同操作系统有对应的 JDK 的版本。 下面是jdk的下载地址https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
跨语言(语言无关性):JVM 只识别字节码,所以 JVM 其实跟语言是解耦的,也就是没有直接关联,JVM 运行不是翻译 Java 文件**,而是识别 class 文件,这个一般称之为字节码**。还有像 Groovy 、Kotlin、Scala 等等语言,它们其实也是编译成字节码,所以它们也可以在 JVM 上面跑,这个就是 JVM 的 跨语言特征。Java 的跨语言性一定程度上奠定了非常强大的 java 语言生态圈。
JDK和JRE和JVM的关系及java程序运行过程(了解)
Java 程序的执行过程
- 首先一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。
- 执行时,.class文件会被翻译成操作系统相关的函数。就是计算机可以看得懂的语言
- 过程如下:Java 文件->编译器>字节码->JVM->机器码。
JVM、JRE、JDK 的关系
从上面可以看到JVM 只是一个翻译,把 Class 翻译成机器识别的代码,但是需要注意,JVM 不会自己生成代码,需要大家编写代码,同时需要很多依赖类库,这个时 候就需要用到 JRE。
JRE是什么:它除了包含 JVM 之外,提供了很多的类库(就是我们说的 jar 包,它可以提供一些即插即用的功能,比如读取或者操作文件,连接网络, 使用 I/O 等等之类的)**这些东西就是 JRE 提供的基础类库。**JVM 标准加上实现的一大堆基础类库,就组成了 Java 的运行时环境,也就是我们常说的 JRE。
JDK是什么:我们写完代码要编译代码,还需要调试代码,还需要打包代码、有时候还需要反编译代码。所以我们会使用 JDK,因为 JDK 还提供了一些非常好用的小工具,比如 javac(编译代码)、java、jar (打包代码)、javap(反编译<反汇编>)等。这个就是 JDK。
JVM 的作用是:从软件层面屏蔽不同操作系统在底层硬件和指令的不同。这个就是我们在宏观方面对 JVM 的一个认识。 同时 JVM 是一个虚拟化的操作系统,类似于 Linux 或者 Windows 的操作系统,只是它架在操作系统上,接收字节码也就是 class,把字节码翻译成操作系统上的 机器码且进行执行。
JVM知识大全
首先送大家一张图
上面的图片囊括了几乎JVM的全部知识点,JVM左右java中的一个非常大的模块的知识系统有他一点的复杂度和难度,也是程序员进入大厂必须要战胜的一道难关想要高清无修版本的图片 可以加我微信
JVM学习路线规划
首先在学习之前呢,我觉得作为一个程序员去学习东西都应该有四问
- 这个东西的结构是什么
- 这个东西是怎么运行的
- 他的运行方式有哪些缺点
- 如何改进
首先我们在做第一问:JVM 能涉及非常庞大的一块知识体系,比如内存结构、垃圾回收、类加载、性能调优、JVM 自身优化技术、执行引擎、类文件结构、监控工具等。 垃圾回收回收的就是内存、类加载加载到的地方也是内存、性能优化也涉及到内存优化、执行引擎与内存密不可分、类文件结构与内存的设计有关
系,监控工具也会监控内存。所以内存结构处于 JVM 中核心位置。也是属于我们入门 JVM 学习的最好的选择。 同时 JVM 是一个虚拟化的操作系统,所以除了要虚拟指令之外,最重要的一个事情就是需要虚拟化内存,这个虚拟化内存就是我们马上要讲到的 JVM 的内存区域。
关于内存区域就在下一章讲吧
感觉还可以说一点东西,但是第一章就到这里吧,作为一个新人博客主,文章里面有错误的或者不准确的东西,希望可以得到大家的指正。在这里谢谢大家了