JVM(Java虚拟机介绍)

本文概要

  • JVM体系结构
JVM(Java虚拟机)是一个抽象的机器。这是,它提供了Java字节码可以被执行的运行时环境的规范。
JVM适用于许多硬件和软件平台(即JVM平台而定)。
什么是JVM
它是:
  1. 其中,Java虚拟机的工作的规范中指定。但是,实施供应商是独立选择的算法。它的实施已经被甲骨文等公司提供。
  2. 实现它的实施被称为JRE(Java运行环境)。
  3. 运行时实例每当你写在命令提示符下运行java类的java命令,创建JVM的一个实例。
它能做什么
以下操作中的JVM执行:
  • 加载代码
  • 验证码
  • 执行代码
  • 提供运行环境
JVM提供了定义:
  • 存储区
  • 类文件格式
  • 寄存器组
  • 垃圾收集堆
  • 致命错误报告等。
JVM体系结构我们先来了解JVM的内部结构。它含有的类加载器,存储区,执行引擎等。
JVM(Java虚拟机介绍)

文章图片
1)类加载器
类加载器是JVM的一个子系统,其用于加载的类文件。每当我们运行Java程序,它是由类加载器第一次加载。有三个内置的类装载器在Java中。
  1. 引导类加载器:这是第一类加载器是超类扩展类加载器的。它加载其中包含Java标准版的所有类文件一样java.lang包类的rt.jar文件,java.net包类,java.util包中的类,java.io包中的类,java.sql包类等。
  2. 扩展类加载器:这是引导的子类加载器和系统类加载器的父类加载器。它loades位于$ JAVA_HOME / JRE / lib / ext目录里面的jar文件。
  3. 系统/应用的ClassLoader:这是扩展类加载器的子类加载器。它加载从classpath中的类文件。默认情况下,类路径设置为当前目录。你可以使用“-cp”或“-classpath”开关改变类路径。它也被称为应用程序类加载器。
//Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String,it will print null because it is an //in-built class which is found in rt.jar,so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } }

输出:
sun.misc.Launcher$AppClassLoader@4e0e2f2a null

这是Java提供的内部类加载器。如果你想创建自己的类加载器,你需要扩展ClassLoader类。
2)类(方法)面积
类(方法)区存储每个类结构,如运行时的常量池,字段和方法的数据,方法的代码。
3)堆
这是哪些对象被分配运行时数据区。
4)堆栈
Java堆栈存储帧。它拥有局部变量和部分结果,并起着方法调用和返回的一部分。
【JVM(Java虚拟机介绍)】每个线程都有一个专用JVM栈,同时为线程创建。
一个新帧创建的每个被调用的方法的时间。其方法调用完成时的帧被破坏。
5)程序计数器寄存器
PC(程序计数器)寄存器包含当前正在执行的Java虚拟机指令的地址。
6)本机方法堆栈
它包含在应用程序中使用的所有本机方法。
7)执行引擎
它包含了:
  1. 虚拟处理器
  2. 解释:读取字节码流,然后执行指令。
  3. 刚刚在实时(JIT)编译器:它是用来提高性能。 JIT编译具有同时类似的功能的字节代码的部分,并因此减少所需的编译时间的量。在这里,术语“编译”是指从Java虚拟机(JVM)的指令集指令集特定CPU的翻译。
8)Java本地接口
Java本地接口(JNI)是一个框架,它提供了与写在如C,C另一种语言的另一应用进行通信的接口++,汇编等Java使用JNI框架来输出发送到控制台或相互作用与OS库。

    推荐阅读