JVM - 1 认识 JVM

41 阅读4分钟

image.png

JVM - 1 认识 JVM

为什么要掌握 JVM 相关知识?

  1. 面向工资学习,为雇主提供更有价值的技能,换取更高额的工资回报;
  2. 写出更加精确的代码,就像人的行为的背后是心理、价值观等决定的, java 代码就是那个行为, 对 JVM 有更深入的认识后才能写出更精准的代码;
  3. just like , 别问那么多就是爱好技术, 兴趣是最好的老师;

Java 跨平台

众所周知 JVM 解决了跨平台的问题。

image.png

image.png

其实 Java 代码 和 字节码 是两种语言, 如果任何一种语言可以被编译成 字节码 JVM 就都能够运行它。Java 将平台相关性放到了 JVM 层面实现,对于 Java 程序员来说几乎是透明的, java 程序员不需要了解 JVM 也可以编写出不错的 Java 代码。这极大的提高了工作效率或者说是工程效率。

Java , JDK , JRE , JVM

JRE 是 Java 代码的运行时环境,包含了 Java 提供的基础类库,扩展类库,一些必要的文件和工具

image.png

JDK是Java开发工具包的缩写。Java开发工具包(JDK)是一个软件开发环境,用于开发Java应用程序和小程序。它在物理上是存在的。它包含JRE+开发工具。JDK包含一个私有Java虚拟机(JVM)和一些其他资源,如解释器/加载器(Java)、编译器(javac)、归档器(jar)、文档生成器(Javadoc)等,以完成Java应用程序的开发。

image.png

Java 生态体系很广泛,我们平时编写的 java 代码只是其中很小的一部分。

image.png

JVM 组成

image.png

Classloader 类加载器

Classloader 是JVM的一个子系统,用于加载类文件。每当我们运行java程序时,类加载器都会首先加载它。Java中有三个内置的类加载器。

  • Bootstrap 类加载器:这是第一个类加载器,它是Extension类加载器的超类。它加载rt.jar文件,该文件包含Java标准版的所有类文件,如Java.lang包类、Java.net包类、Java.util包类,Java.io包类,Java.sql包类等。

  • 扩展类加载器 , 这是 Bootstrap 的子类加载器和系统类加载器的父类加载器。它加载位于$JAVA_HOME/jre/lib/ext目录中的jar文件。

  • 系统/应用程序类加载器 , 这是扩展类加载器的子类加载器。它从类路径加载类文件。默认情况下,类路径设置为当前目录。可以使用“-cp”或“-classpath”开关来更改类路径。它也被称为应用程序类加载器。

Class Area 方法区

类(方法)区域存储每个类的结构,如运行时常量池、字段和方法数据、方法代码。

Heap

堆是在其中分配对象的运行时数据区域。

Stack

Java栈存储栈帧(Frame)。它保存局部变量和部分结果,并在方法调用和返回中发挥作用。 每个线程都有一个私有JVM堆栈,与线程同时创建。 每次调用方法时都会创建一个新的栈帧(Frame)。当一个框架的方法调用完成时,它就会被销毁。

Native Stack

它包含应用程序中使用的所有 native (本地) 方法。

PC Register

PC(程序计数器)寄存器包含当前正在执行的Java虚拟机指令的地址。

Execution Engine 执行引擎

包含:

  • 虚拟处理器
  • 解释器:读取字节码流,然后执行指令。
  • 实时(JIT)编译器:它用于提高性能。JIT同时编译具有类似功能的字节码部分,从而减少了编译所需的时间。这里,术语“编译器”指的是从Java虚拟机(JVM)的指令集到特定CPU的指令集的翻译器。
Java Native Interface 本地方法接口

Java Native Interface(JNI)是一个框架,它提供了一个与用另一种语言(如C、C++、Assembly等)编写的另一个应用程序通信的接口。Java使用JNI框架将输出发送到控制台或与操作系统库交互。


最近在看浴血黑帮其中有一段汤姆说的台词:

"The past is not my concern. The future is no longer my concern,either. What is your concern, Tommy? The one minute. The soldier's minute. In a battle , that's all you get. One minute of everything at once. And anything before is nothing. Everything after nothing. Nothing in comparison ... to that one minute."

也许只有这样人才能勇敢的或者麻木的活下去。

image.png


DevX 会持续有趣的技术和见闻,如果你觉得本文对你有帮助希望你可以分享给更多的朋友看到。该文章会同步在微信公众号 【DevXJava】, 方便在微信客户端阅读。

DevX 不止于技术