专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

java虚拟机是什么,深入理解java虚拟机

来源:小易整编  作者:小易  发布时间:2023-03-22 04:23
摘要:java虚拟机是什么,深入理解java虚拟机文章目录一、Java虚拟机是什么二、为什么需要了解Java虚拟机三、JavaJDK的迭代历史四、Java虚拟机发展史与种类五、Java虚拟机规范六、Java虚拟机语言无关性七、Java虚拟机的组成...

java虚拟机是什么,深入理解java虚拟机

七、Java 虚拟机的组成

虚拟机的组成可以简单那划分为 类加载器、执行引擎,以及运行时数据区里面的 堆、方法区、程序计数器、虚拟机栈、本地方法栈 等。

java虚拟机是什么,深入理解java虚拟机

字节码文件

我们编写的 Java 代码在经过编译后就会转换为 Java 虚拟机可以执行的字节码文件,字节码文件中包含了 魔数、编译的版本号、常量池 以及 字节码指令 等;

类加载器

在 Java 中执类初始化时,需要执行 加载、链接 和 初始化 三个阶段,其中类加载器就是在 加载阶段 中用于将本地或网络中的 字节码文件 加载到 Java 虚拟机中的工具。

堆是在 JVM 启动时创建的,是 JVM 运行时数据区中的一块线程共享的内存区域,其内存空间在逻辑上连续,但物理上不一定连接,其主要用于存储 Java 中的 成员变量、类变量 以及 引用类型的局部变量 等。

方法区

方法区是在 JVM 启动时创建的,是 JVM 运行时数据区中的一块线程共享的内存区域,其内存空间在逻辑上连续,但物理上不一定连接,主要用于存储 类信息、方法信息、域信息、JIT代码缓存、运行时常量池。

虚拟机栈

虚拟机栈是 JVM 运行时数据区中的一块线程私有的内存区域,每当我们创建一个 线程 时就会创建一个 虚拟机栈。虚拟机栈主要用于存储线程的 栈帧,每当线程调用方法时就会创建一个栈帧,线程会在栈帧中执行代码计算逻辑,存储计算过程中的中间变量,和方法中的局部变量,当线程调用方法结束后就会使栈帧出栈,销毁栈帧中的数据。

本地方法栈

本地方法栈和虚拟机栈一样,都是用于存储线程执行 方法 时的一些数据,不过虚拟机栈只会在线程调用 Java 中的方法时起作用,而本地方法栈则是线程调用 Native 类型的方法时起作用。

程序计数器

程序计数器是 JVM 运行时数据区中的一块线程私有的内存区域,每当我们创建一个线程时就会创建一个程序计数器,其主要用于记录线程执行到的 字节码位置,这样可以保证线程在获得 CPU 时间片后执行时,能够恢复到正确的执行位置。

八、JVM 的生命周期

JVM 生命周期主要有三个部分,主要是虚拟机 启动、运行 和 退出 几个过程。

启动

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

  • 自定义的类是由系统类加载器加载的。自定义类的顶级父类都是 Object,Object 作为核心 API 中的类,是需要被引导加载器 (bootstrap class loader) 加载的。父类的加载是优先于子类加载的,所以要加载自定义类之前,会就加载 Object 类。

执行

  • JVM 运行启动以后有一个清晰的任务,那就是说只要执行 Java 程序,Java 程序执行时 JVM 才会运行,Java 程序结束时 JVM 就会停止。

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

退出

JVM 在执行过程中,如果遇到以下几种情况就会退出:

  • ① 程序正常执行结束;

  • ② 程序在执行过程中遇到了异常或错误而异常终止;

  • ③ 由于操作系统用现错误而导致 Java 虚拟机进程终止;

  • ④ 某线程调用 Runtime 类或 system 类的 exit 方法,或 Runtime 类的 halt 方法,并且 Java 安全管理器也允许这次 exit 或 halt 操作;

  • ⑤ 除此之外,JNI(Java Native Interface)规范描述了用 JNI Invocation API 来加载或卸载 Java 虚拟机时,Java 虚拟机的退出情况;


本文地址:IT问答频道 https://www.hkm168.com/itwenda/936272_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!

共3页 1 2 3 当前是最后一页

IT问答
小编:小易整编
相关文章相关阅读
  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

  • Java 中的各种锁有哪些?

    Java 中的各种锁有哪些?

      Java中15种锁的介绍  在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:  公平锁/非公平锁  可重入锁/不可重入锁  独享锁/共享锁  互斥锁/读写锁  乐观锁...

  • Java中的Scanner操作详解

    Java中的Scanner操作详解

    scanner是java中的一个常用类,用来读取控制台或文件中的输入数据。它提供了一种简单的方式来解析基本类型和字符串,并支持对正则表达式进行匹配。Scanner类位于java.util包中,因此在编写程序时需要import...

  • java8新特性有哪些

    java8新特性有哪些

    java8新特性有:1、lambda表达式;2、方法引用;3、默认方法;4、新编译工具;5、streamapi;6、datetimeapi;7、option;8、nashornjavascript引擎。Java8新增了非常多的特性...

  • java中tostring方法的作用是什么

    java中tostring方法的作用是什么

    java中tostring方法的作用是会返回一个【以文本方式表示】此对象的字符串,结果是一个简明但易于读懂的信息表达式。java中tostring方法的作用是toString方法会返回一个“以文本方式表示”此对象的字符串。结果是一个简明但易...

  • Javascript如何使网页跳转

    Javascript如何使网页跳转

    方法:1、使用_window.location.href方式;2、使用window.history.back方式;3、使用window.navigate方式;4、使用self.location方式;5、使用top.location方式。本教...

  • java异步是什么意思

    java异步是什么意思

    本篇文章将对java异步进行介绍,希望对大家有所帮助。异步:异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。也就是说无论异步方法执行代码需要多长时间,跟主线程没有任何影响,主线程可以继续向下执行。...

  • 比较流行的Java工作流框架:5个最佳选项

    比较流行的Java工作流框架:5个最佳选项

    选择合适的Java工作流框架:比较常用的5个选择简介:在现代软件开发中,工作流程的管理是一个至关重要的方面。Java工作流框架是一种专门用于定义和执行工作流程的软件工具。它们可以帮助开发人员简化工作流程的开发和管理,提高效率和可靠性。本文将...

  • 周排行
  • 月排行
  • 年排行

精彩推荐