面试小札:JVM虚拟机

server/2024/11/30 3:56:34/

1. 定义与基本概念
- JVM(Java Virtual Machine)即Java虚拟机,是Java程序的运行核心。它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来运行Java字节码。字节码是一种中间格式,它使得Java程序能够实现“一次编写,到处运行”的特性。
2. 运行机制
- 类加载机制
- 包括加载、验证、准备、解析和初始化这几个阶段。加载阶段是将类的字节码文件加载到内存中;验证阶段是确保字节码文件的正确性和安全性;准备阶段是为类的静态变量分配内存并设置默认初始值;解析阶段是将符号引用转换为直接引用;初始化阶段是执行类构造器方法,对类的静态变量进行赋值操作。
- 执行引擎
- 它负责执行字节码指令。有多种执行方式,如解释执行和即时编译(JIT)。解释执行是逐行解释字节码并执行,速度相对较慢。JIT编译器会在程序运行过程中,将热点代码(经常被执行的代码)编译成机器码,这样后续执行这些代码时就可以直接以机器码的速度运行,大大提高了执行效率。
3. 内存结构
- 程序计数器
- 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在多线程环境下,每个线程都有自己独立的程序计数器,用于记录当前线程执行的位置,这样当线程切换回来时能够知道从哪里继续执行。
- Java虚拟机栈
- 每个Java方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。随着方法的调用和返回,栈帧在虚拟机栈中入栈和出栈。它是线程私有的,生命周期与线程相同。
- 本地方法栈
- 与Java虚拟机栈类似,不过它是为本地(Native)方法服务的,本地方法是用其他语言(如C、C++)编写并通过JNI(Java Native Interface)调用的方法。
- 堆

- 是Java虚拟机所管理的内存中最大的一块,它是所有线程共享的区域。主要用于存放对象实例和数组。垃圾收集器主要就是回收堆中不再使用的对象占用的空间,以避免内存泄漏。
- 方法区
- 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。它也是各个线程共享的内存区域。在Java 8之后,永久代(PermGen)被元空间(Metaspace)取代,元空间使用本地内存,而不是虚拟机内存。
4. 垃圾回收(GC)
- JVM的垃圾回收机制自动回收不再使用的对象所占用的内存空间。有多种垃圾回收算法,如标记 - 清除算法、复制算法、标记 - 整理算法等。不同的垃圾回收器会采用不同的算法组合。例如,Serial GC是一个单线程的垃圾回收器,适合于单核CPU的小型应用;Parallel GC是多线程的垃圾回收器,可以提高垃圾回收的效率;CMS(Concurrent Mark Sweep)GC是一种以获取最短回收停顿时间为目标的垃圾回收器,适用于对响应时间要求较高的应用。
5. 重要性和应用场景
- JVM的存在使得Java语言具有高度的可移植性,开发人员可以专注于编写代码,而不用担心底层操作系统和硬件的差异。它广泛应用于企业级应用开发、安卓应用开发(Android使用了经过改造的JVM)、大数据处理(如Hadoop生态系统中的部分组件)等众多领域。


http://www.ppmy.cn/server/146067.html

相关文章

光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量时序光伏功率预测 (Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运行一个main即可运行,数据格式…

【DVWA】File Inclusion文件包含实战

安能有术无道有道无心&#xff0c;乐得仁心仁义正心行道。 1.File Inclusion(Low) 相关代码分析 <?php// The page we wish to display $file $_GET[ page ];?>可以看到&#xff0c;服务器端对page参数没有做任何的过滤跟检查。 服务器期望用户的操作是点击下面的…

Android 性能优化:内存优化(理论篇)

内存作为App程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&#xff0c;重则导致用户应用程序发生 OOM&#xff08;out of memory&#xff09;崩溃。喜马直播随着近些年的业…

Lumos学习王佩丰Excel第十六讲:简单文本函数

提示&#xff1a;文本函数关心的是一个单元格中的字符串哦~~ 一、使用文本截取字符串&#xff08;如何用刀&#xff09; 1、Left函数&#xff08;从左向右切&#xff09; LEFT函数用于从文本左侧开始提取指定个数的字符。如果要提取的字符串在左侧&#xff0c;并且要提取的字…

Unity中Http框架

Unity中Http框架 介绍框架代码使用方法总结 介绍 最近做了ASP.NET Web应用程序(.Net Framework)的Http服务&#xff0c;所以想也把之前我的Http框架也整理一下发布出来供大家参考。 框架代码 using System; using System.Collections; using System.Collections.Generic; us…

UE5材质混合模式

在 Unreal Engine 5 (UE5) 中&#xff0c;混合模式 (Blend Mode) 是材质系统中的一个重要设置&#xff0c;它定义了材质的透明度和渲染方式。混合模式控制了材质如何与背景进行混合&#xff0c;决定了物体的显示方式&#xff08;是否透明、如何透明、如何与其他物体交互等&…

Docker 容器网络创建网桥链接

一、网络:默认情况下,所有的容器都以bridge方式链接到docker的一个虚拟网桥上; 注意:“172.17.0.0/16”中的“/16”表示子网掩码的长度为16位,它表示子网掩码中有16个连续的1,后面跟着16个连续的0。用于区分IP地址中的网络部分和主机部分; 二、为何自定义网络? 加入自…

linux curl 和python with open 读取文件方式解读

Linux curl 和 Python 的 with open 的读取文件方式本质不同&#xff0c;尽管都可以处理文件内容。以下是详细对比&#xff1a; 1. curl 的文件读取 用途&#xff1a;curl 的 --form "file<file_path>" 或 -d <file_path> 选项读取文件内容&#xff0c;…