📝 Java虚拟机教程

15篇技术文档
  Java虚拟机教程

📅  最后修改于: 2020-11-13 05:33:52        🧑  作者: Mango

Java虚拟机是虚拟机,是具有自己的ISA,自己的内存,堆栈,堆等的抽象计算机。它是一种引擎,用于管理系统内存并在运行时环境中驱动Java代码或应用程序。它在主机操作系统上运行,并对资源有需求。本教程专为希望在任何操作系统或设备上运行Java代码和其他应用程序以及优化和管理程序内存的软件专业人员而设计。先决条件在开始学习本教程之前,我们假定您已经对Java编程有基本的了解。如果您不熟悉这些概念,建...

  Java虚拟机-简介

📅  最后修改于: 2020-11-13 05:34:07        🧑  作者: Mango

JVM是一个规范,可以遵循不同的实现,只要它们遵守这些规范即可。可以在下面的链接中找到规格-https://docs.oracle.comOracle有其自己的JVM实现(称为HotSpot JVM),IBM有其自己的(例如J9 JVM)。规范内定义的操作如下(源-Oracle JVM规范,请参见上面的链接)-“类”文件格式资料类型原始类型和值参考类型和值运行时数据区镜框对象的表示浮点运算特殊方法...

  Java虚拟机-体系结构

📅  最后修改于: 2020-11-13 05:34:22        🧑  作者: Mango

HotSpot JVM 3的架构如下所示-执行引擎包括垃圾收集器和JIT编译器。 JVM有两种形式-客户端和服务器。两者共享相同的运行时代码,但使用的JIT不同。稍后我们将详细了解。用户可以通过指定JVM标志-client或-server来控制使用哪种样式。服务器JVM被设计用于服务器上长时间运行的Java应用程序。JVM提供32b和64b版本。用户可以通过在VM参数中使用-d32或-d64来指定...

  Java虚拟机-类加载器

📅  最后修改于: 2020-11-13 05:34:41        🧑  作者: Mango

JVM以动态方式管理加载,链接和初始化类和接口的过程。在加载过程中,JVM查找一个类的二进制表示形式并创建它。在链接过程中,已加载的类将合并到JVM的运行时状态中,以便可以在初始化阶段执行它们。 JVM基本上将存储在运行时常量池中的符号表用于链接过程。初始化包括实际执行链接的类。装载机类型BootStrap类加载器位于类加载器层次结构的顶部。它将标准JDK类加载到JRE的lib目录中。Extens...

  Java虚拟机-运行时数据区

📅  最后修改于: 2020-11-13 05:35:06        🧑  作者: Mango

JVM规范定义了程序执行期间所需的某些运行时数据区域。其中一些是在JVM启动时创建的。其他线程是线程本地的,仅在创建线程时创建(在销毁线程时销毁)。这些在下面列出-PC(程序计数器)寄存器它在每个线程本地,并且包含该线程当前正在执行的JVM指令的地址。叠放它是每个线程本地的,并在方法调用期间存储参数,本地变量和返回地址。如果线程需要的堆栈空间超出允许的范围,则会发生StackOverflow错误。...

  Java虚拟机-JIT编译器

📅  最后修改于: 2020-11-13 05:35:40        🧑  作者: Mango

在本章中,我们将学习JIT编译器,以及编译和解释语言之间的区别。编译语言与口译语言诸如C,C++和FORTRAN之类的语言是已编译的语言。它们的代码以针对底层计算机的二进制代码形式提供。这意味着高级代码由专门为基础体系结构编写的静态编译器立即编译为二进制代码。生成的二进制文件不会在任何其他体系结构上运行。另一方面,诸如Python和Perl之类的解释语言可以在任何机器上运行,只要它们具有有效的解释...

  Java虚拟机-编译级别

📅  最后修改于: 2020-11-13 05:36:00        🧑  作者: Mango

JVM支持五个编译级别-口译员完全优化的C1(无配置文件)具有调用和后端计数器的C1(灯光配置文件)具有完整配置文件的C1C2(使用前面步骤中的分析数据)如果要禁用所有JIT编译器并仅使用解释器,请使用-Xint。客户端与服务器JIT使用-client和-server激活相应的模式。客户端编译器(C1)比服务器编译器(C2)更快开始编译代码。因此,到C2开始编译时,C1就已经编译了代码段。但是,在...

  Java虚拟机-32b与64b

📅  最后修改于: 2020-11-13 05:36:16        🧑  作者: Mango

在32b机器上,只能安装32b版本的JVM。在64b机器上,用户可以在32b和64b版本之间进行选择。但是有一些细微差别会影响我们的Java应用程序的性能。如果Java应用程序使用的内存少于4G,那么即使在64b机器上,我们也应使用32b JVM。这是因为在这种情况下,内存引用将仅为32b,并且处理这些引用将比处理64b地址便宜。在这种情况下,即使我们使用的是OOPS(普通对象指针),64b JV...

  Java虚拟机-JIT优化

📅  最后修改于: 2020-11-13 05:36:35        🧑  作者: Mango

在本章中,我们将学习JIT优化。方法内联在这种优化技术中,编译器决定将您的函数调用替换为函数体。以下是相同的示例-使用这种技术,编译器可以节省机器执行任何函数调用的开销(它需要将参数压入和弹出到堆栈中)。因此,生成的代码运行速度更快。方法内联只能用于非虚拟功能(未被覆盖的功能)。考虑如果子类中重写了“ add”方法,并且直到运行时才知道包含该方法的对象的类型,将会发生什么。在这种情况下,编译器将不...

  Java虚拟机-垃圾回收

📅  最后修改于: 2020-11-13 05:36:59        🧑  作者: Mango

Java对象的生命周期由JVM管理。一旦程序员创建了对象,我们就不必担心其剩余生命周期。 JVM将自动查找那些不再使用的对象,并从堆中回收它们的内存。垃圾回收是JVM的一项主要操作,根据我们的需求对其进行调整可以使我们的应用程序获得巨大的性能提升。现代JVM提供了多种垃圾回收算法。我们需要了解应用程序的需求,以决定使用哪种算法。您不能像使用非GC语言(如C和C++)那样,使用Java以编程方式取消...

  Java虚拟机-世代GC

📅  最后修改于: 2020-11-13 05:37:42        🧑  作者: Mango

大多数JVM将堆分为三代-青年一代(YG),老一代(OG)和永久一代(也称为终身一代)。这种想法背后的原因是什么?实证研究表明,大多数已创建的对象的寿命都很短-资源https://www.oracle.com如您所见,随着时间分配的对象越来越多,幸存的字节数变少了(通常)。 Java对象的死亡率很高。我们将看一个简单的例子。 Java中的String类是不可变的。这意味着每次您需要更改String...

  Java虚拟机-调整GC

📅  最后修改于: 2020-11-13 05:38:21        🧑  作者: Mango

在上一章中,我们了解了各种Generation Gcs。在本章中,我们将讨论如何调整GC。堆大小堆大小是影响Java应用程序性能的重要因素。如果太小,它将经常被填充,结果,GC必须经常对其进行收集。另一方面,如果我们只是增加堆的大小,尽管需要减少收集频率,但是暂停的时间会增加。此外,增加堆大小会对基础OS造成严重损失。使用分页,该操作系统使我们的应用程序看到的内存远远大于实际可用的内存。操作系统通...

  Java虚拟机-Java中的内存泄漏

📅  最后修改于: 2020-11-13 05:38:37        🧑  作者: Mango

我们将在本章中讨论Java中的内存泄漏概念。以下代码在Java中创建内存泄漏-在上面的代码中,当方法退出时,我们尚未关闭连接对象。因此,物理连接在触发GC之前保持打开状态,并认为连接对象不可访问。现在,它将在连接对象上调用final方法,但是,可能无法实现。因此,该对象将不会在此循环中被垃圾回收。下一步将发生同样的事情,直到远程服务器看到连接已经打开很长时间并强行终止连接为止。因此,没有参考的对象...

  Java虚拟机-有用的资源

📅  最后修改于: 2020-11-13 05:38:57        🧑  作者: Mango

以下资源包含有关Java虚拟机的其他信息。请使用它们来获得有关此方面的更深入的知识。Java虚拟机上的有用链接Java虚拟机@ Wikipedia-Java虚拟机,其历史和各种其他术语已用简单的语言进行了解释。Java虚拟机上的有用书籍要在此页面上注册您的网站,请发送电子邮件至contact@tutorialspoint.com...

  讨论Java虚拟机

📅  最后修改于: 2020-11-13 05:39:09        🧑  作者: Mango

Java虚拟机是虚拟机,是具有自己的ISA,自己的内存,堆栈,堆等的抽象计算机。它是一种引擎,用于管理系统内存并在运行时环境中驱动Java代码或应用程序。它在主机操作系统上运行,并对资源有需求。...