java重要知识点 JVM基本结构

JVM高频面试基本问题与知识点整理 阅读详情

Java 虚拟机(JVM)是 Java 程序运行的基础环境,它将 Java 字节码转换为机器码,使得同一程序能够在不同平台上运行。JVM 的内部结构包括多个核心组件,协同工作以管理内存、执行代码和垃圾回收。

JVM 基本结构概览

JVM 的主要组成部分包括以下几个核心区域:

  1. 类加载子系统:负责加载、链接和初始化 Java 类。
  2. 运行时数据区:JVM 运行时的数据存储区,包含方法区、堆、栈、本地方法栈和程序计数器。
  3. 执行引擎:将字节码转换为机器码,并优化执行效率。
  4. 垃圾回收(GC):自动回收无用对象,管理内存。

接下来,我们详细介绍每个部分的作用及其工作机制。

1. 类加载子系统

类加载是 JVM 加载类文件的过程,包括加载、验证、准备、解析和初始化五个阶段。这个系统负责将字节码文件转换为 JVM 可以执行的格式。

  • 加载:将 .class 文件加载到内存。
  • 验证:确保类的字节码文件不包含非法的代码。
  • 准备:为类的静态变量分配内存。
  • 解析:将符号引用(如类名)替换为直接引用。
  • 初始化:执行静态初始化代码。
示例代码:

public class ClassLoaderExample { static int x = 10; // 在准备阶段分配内存,在初始化阶段赋值 static { x = 20; // 初始化阶段,赋值为 20 } }

 

2. 运行时数据区

运行时数据区是 JVM 运行时分配内存的地方,包括方法区、堆、栈、本地方法栈和程序计数器。

a. 方法区

方法区存储类的元数据(如字段、方法、静态变量)。方法区可以理解为存储类模板的地方,JVM 在这里查找类的方法和字段信息。

b. 堆

堆是存储对象实例的区域,也是 Java 内存管理的主要区域。所有的对象都在堆中分配内存。堆的内存管理通过垃圾回收机制自动管理,分为新生代和老年代。

c. 栈

栈用于存储方法调用的局部变量、操作数等。每个线程有自己的栈,栈中的每个方法调用对应一个栈帧。栈帧包括局部变量表和操作数栈,线程结束时,栈空间会自动释放。

d. 本地方法栈

本地方法栈用于存储本地方法调用的数据。它是支持 JNI(Java Native Interface)的部分,使得 Java 能调用 C/C++ 等语言的本地代码。

e. 程序计数器

程序计数器用于记录当前线程执行到的字节码位置。它是 JVM 中唯一可以保证线程独立的区域,保证了多线程执行时的安全性。

3. 执行引擎

执行引擎负责解释或编译字节码,并将其转换为机器码,具体包括以下部分:

  • 解释器:逐行解释执行字节码,启动快但运行效率相对较低。
  • 即时编译器(JIT):JIT 编译器会将高频执行的字节码编译为本地机器码,以提高效率。通过这种方式,JVM 在执行效率和启动速度之间取得平衡。
示例代码:

public class JITExample { public void run() { for (int i = 0; i < 1000000; i++) { // JIT 编译器会将频繁执行的代码编译为机器码,提高执行效率 System.out.println("JIT Example"); } } }

4. 垃圾回收器(GC)

垃圾回收器是 JVM 中的内存管理模块。它自动回收不再使用的对象,避免手动管理内存。垃圾回收通常分为两大代,即新生代和老年代,新生代分为 Eden 区和两个 Survivor 区。GC 的过程如下:

  1. 新生代 GC(Minor GC):在新生代区域中频繁触发,用于回收短期存活的对象。
  2. 老年代 GC(Major GC):在老年代区域中触发,处理长生命周期的对象,通常频率低,但消耗的资源较多。

通俗比喻

可以将 JVM 比作一个图书馆,里面有不同的区域:

  • 类加载子系统 就像图书馆的入口处,它将书籍(Java 类文件)进行分类、编排上架,确保每本书的内容合法(验证阶段)。
  • 方法区 是一本书的目录,记录了书的结构(元数据、方法)。
  • 堆 就是图书馆的书架,存放所有书籍内容。这里的书随时可以取出。
  • 栈 是一张阅读桌,记录读者阅读时的临时信息,比如笔记、标记的位置(局部变量)。
  • 执行引擎 就是图书馆里的阅读人员,将书本内容快速解读出来(解释器),高频阅读的书甚至会直接记在脑子里(JIT编译)。
  • 垃圾回收器 则像图书馆的管理人员,定期将无人翻阅的旧书清理掉,以便给新书腾出空间。

总结

JVM 是 Java 程序运行的核心结构,通过类加载子系统加载类,运行时数据区管理内存,执行引擎执行字节码,垃圾回收器回收无用对象。JVM 提供了跨平台的执行环境,使得 Java 程序可以“一次编译,到处运行”。

这个 JVM 结构不仅确保了代码的安全性和稳定性,也帮助开发者有效管理内存,使得 Java 程序在不同平台上都能流畅地执行。

别再死记公式了!用TL072运放设计带通滤波器,调出干净正弦波的实战心得与误区盘点 本文分享了使用TL072运放设计带通滤波器的实战经验,重点解决波形失真问题,提供单电源供电优化、动态调谐技巧及仿真与现实的参数修正方法,帮助工程师调出纯净正弦波。内容涵盖模拟电路设计中的常见误区与解决方案,适合电子工程师和爱好者参考。 阅读详情

相关推荐

手把手教你用OpenCalib完成激光雷达与相机联合标定:从数据准备到结果可视化

本文详细介绍了使用OpenCalib工具链中的lidar2camera模块完成激光雷达与相机联合标定的全流程,包括数据准备、标定命令执行、结果验证与可视化。通过实战指南,帮助读者掌握工业级标定技术,提升自动驾驶和机器人领域的传感器融合精度。

weixin_30872499的博客 398

JVM面试知识点

一.基本概念 1.1 JVM是可运行Java代码的假象机器,包括一套字节码指令集,一套寄存器,一个栈,一个垃圾回收,堆,和一个方法存储域,运行在操作系统上,与硬件没有直接交互。 运行过程: ① Java 源文件—->编译器—->字节码文件 ② 字节码文件—->JVM—->机器码 1.2 运行时数据区 程序计数器(线程私有):当前线程所执行的字节码的行号指示器,执行java方法的话,计数器记录的是虚拟机字节码指令的地址,如是Native方法,则为空。 虚拟机栈(线程私有):描述jav

weixin_47626220的博客 2142

告别Modern Standby烦恼:在Windows 11中手动启用S3睡眠模式的完整指南

本文详细介绍了如何在Windows 11中手动启用S3睡眠模式,解决Modern Standby(S0模式)导致的笔记本睡眠后耗电问题。通过注册表修改、电源选项调整、BIOS设置等步骤,帮助用户恢复传统深度睡眠功能,显著提升电池续航表现。

weixin_30271335的博客 557

深度学习与总结JVM专辑(一):基础介绍&&内存结构(图文+代码)

整理总结

左灯右行的爱情 1954

图像去畸变(相机成像、畸变模型)

首先通过上一步相机标定得到畸变参数和相机内参,同时,由于图像去畸变都是在归一化相机坐标系下进行的,而图像都是像素坐标,所以需要先通过相机内参矩阵将图片上的像素点从像素坐标系转变到归一化坐标系,再通过畸变参数在归一化坐标上进行去畸变的操作。由于畸变是发生在世界点通过透镜投影到相机坐标系这个过程中的,所以去畸变操作是在相机坐标系下进行的。(如图,Pd即为畸变后成像点)3.读取图像和各个参数,调用去畸变函数(opencv自带的cv.undistort函数),就可以完成对图像的去畸变处理,进而得到去畸变的图像。

lm5688jjupm1n28的博客 1050

MediaPipe 教程:从安装到应用-全网最全

MediaPipe是Google推出的开源框架,专为构建机器学习管道设计,可以高效处理视频、音频等时间序列数据。本文教程从安装到应用逐步讲解: 安装步骤简单,只需通过pip安装mediapipe包并验证版本; 重点演示人体姿态检测功能,可识别33个身体关键点; 提供基础代码实现,包括视频捕获、关键点检测与可视化; 强调模块化开发,将功能封装成类以提高代码复用性。 教程适合初学者,通过清晰指引和实用代码示例,帮助快速实现计算机视觉应用。

FJN110的博客 1563

JVM(1)--JVM概述、类加载

为什么学习 JVM? 面试的需要 学过 Java 的程序员对 JVM 应该并不陌生。程序员为什么要学习 JVM 呢,其实不懂 JVM 也可以照样写出优质的代码,但是不懂 JVM 有可能别被面试官虐得体无完肤。 中高级程序员必备技能 项目管理,性能调优

yaobeisheng的博客 205

实战!C#整合YOLO+Halcon做玻璃瓶口缺陷检测:裂纹识别+尺寸测量一步到位(附DLL交互代码)

AI擅长语义识别(裂纹、缺陷),传统机器视觉擅长精密测量(尺寸、位置),C#做整合层,才能满足工业生产的“精度+效率+稳定性”要求。这套方案不只是玻璃瓶检测能用,改改模型和测量逻辑,还能用到瓶盖缺陷检测、饮料瓶液位检测等场景。如果你们厂也有类似的质检痛点,评论区留个言,我帮你看看怎么调整算法参数。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 868

java分享知识点_Java核心知识整理——分享一份Java核心知识点整理.pdf

1、目录一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。获取方式:转发+关注后私信回复【Java资料】(粉丝福利)2. JVM(1) 基本概念:JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统...

weixin_42373066的博客 401

OpenHarmony WiFi子系统全解析:从架构到代码实现(大合集)

头文件路径[相对路径][相对路径][相对路径][相对路径]// 网络配置结构 (wifi_device_config.h)// SSID字符串// 预共享密钥// 安全类型// 网络ID// 优先级// 是否隐藏网络// 扫描信息结构 (wifi_scan_info.h)// SSID// BSSID (MAC地址)// 安全类型int rssi;// 信号强度// 频率// 信道宽度// 时间戳// 连接信息结构 (wifi_linked_info.h)

m0_67505153的博客 1059

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 870

java核心知识点分享给大家_Java核心知识整理——分享一份Java核心知识点整理.pdf...

1、目录一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。获取方式:转发+关注后私信回复【Java资料】(粉丝福利)2. JVM(1) 基本概念:JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统...

weixin_31128057的博客 124

关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本

如何将它翻译成matlab可以使用的矩阵变量,并参与运算。 由于这个大型刚度矩阵125万x125万≈1e12。matlab甚至其他计算软件无法保存这个大的一个矩阵文件。而这个刚度矩阵作为稀疏矩阵其中非零元素的数目只有有500多万。采用sparse稀疏矩阵技术是可以保存。 这里简单介绍一下这个Hypemesh导出的大型刚度矩阵txt文本。如图DMIG开头的标识符是换行符,后面两列是表示这条非零元素在刚度矩阵中列数的信息。我们已经将左边字母和符号等批量删除,得到了右边textread函数可以...

wenyusuran的专栏 1795

初学JVM的浅层理解

如有问题欢迎大家指正,非常感谢! 带着问题学习! JVM题目: 请你谈谈你对JVM的理解? java8虚拟机和之前的变化? 什么是00M,什么是栈溢出StackOverFlowError?怎么分析? JVM的常用调优参数有哪些? 内存快照如何抓取,怎么分析Dump文件? 谈谈JVM中,你对类加载器的认识? … 一、JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,引入Java语言虚拟机后,Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可

f1244313823的博客 333

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JAVA知识点总结

第1章 Java程序设计概述 1)       开发Java语言的公司? Sun (SunMicrosystems)太阳微电子公司开发   2)       Java的3个版本? J2SE(Java2Standard Edition) 标准版 J2EE(Java2 Platform,Enterprise Edition) 企业版 J2ME(Java2 Micro Edition)

雷子的窝 1099

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

编译java程序后生成的面向JVM_java习题

习题一一、简答题1.试述JAVA语言的特点与优势。2.Java语言程序分为哪几种?Java Application程序和Java Applet程序的主要区别是什么?3.Java Application程序在结构上有哪些特点?如何编译、运行?被编译后生成什么文件?该文件机器可以直接识别吗?如何执行?4.安装JDK后如何对JAVA_HOME、PATH和CLASSPATH环境变量进行设置?它们的作用是什...

weixin_33575756的博客 938

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第一天:java基本概念

使用的是《head first java》这本书籍,鱼皮推荐的,个人体验就是比起传统教科书更加有趣易懂,而且各种概念讲的也比较详细,今天打算看到26页,也就是第一章结束。 第一章讲的内容就是各种概念: 如:java的工作方式、java的简史、java的程序结构,还有关于类、循环语句的解说,都是简单的认识。 在这一章我认识到了java就是一种语言,一种计算机能理解的语言,我们所需要做的就是编译成指令下达给电脑,设计成真正的应用程序。我也对于各种词汇有了初步的了解。 今日学到的知识点: 第一个知识点:

weixin_54804810的博客 97

Java高频面试题详解:数据类型、多线程与JVM等核心知识点解析

本文汇总并详解了Java面试中常见的高频问题,涵盖Java的基本数据类型、面向对象特性、异常处理机制及多线程编程等核心内容。此外,文章还涉及JVM内存结构、泛型应用、垃圾回收机制、字符串处理、设计模式中的单例模式以及反射机制等高级话题,帮助准备Java相关岗位面试的同学全面提升面试竞争力。

qq_51589613的博客 255

JVM运行的基本流程

目录前言JVM之运行流程JVM之基本结构JVM之内存空间:方法区、java堆、java栈、本地方法栈方法区java堆(Heap 堆)java栈(Stack 栈)本地方法栈总结 前言 |ू・ω・` ) 因为在很多学习的途中,如果你想去理解一个东西的本质的话,肯定得去挖掘知识的底部。 在java中,JVM一直是java知识里面进阶阶段的重要部分。 如果希望在java领域研究的更深入,那JVM则是如论如...

旺旺的博客 1万+

JVM基本结构

Java 程序可以调用本地代码,从而实现对系统资源的直接访问或使用现有的本地库。JVM的设计使得Java程序具有跨平台的特性,即“编写一次,到处运行”。通过将Java代码编译为字节码,JVM能够在不同的操作系统和硬件平台上执行这些字节码。

午夜后是黎明,风雨后是骄阳 1352

java之jvm学习笔记十三(jvm基本结构)

欢迎装载请说明出处:http://blog.youkuaiyun.com/yfqnihao                       这一节,主要来学习jvm的基本结构,也就是概述。说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成图形,所以只要你有耐心,仔细,认真,并发挥你的想象力,这一章之后你会充满自信。当然,不是说看完本章,就对jvm了解了,jv

keycoding的专栏 3万+

JVM——JVM与Java体系结构

JVM简介、OpenJDK和OracleJDK、虚拟机与JVM、JVM整体结构、Java代码执行流程、JVM的架构模型、JVM生命周期、JVM的明星产品

码说芯语的博客 1867

Java JVM的基本概念、结构、生命周期

介绍了JVM的基本概念、JVM的生命周期、大概结构。

终生学习践行者 3209

jvm的基本结构

jvm的基本结构 这一节,主要来学习jvm的基本结构,也就是概述。说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成图形,所以只要你有耐心,仔细,认真,并发挥你的想象力,这一章之后你会充满自信。当然,不是说看完本章,就对jvm了解了,jvm要学习的知识实在是非常的多。在你看完本节之后,后续我们还会来学jvm的细节,但是如果你在学习完本节的前提下去学习,再学习其他jvm的细节会事半功倍。 知识点1:什么是java虚拟机(你以为你知道,如果你看我下面的例子,

qq_44918331的博客 362

JVM基本结构?JVM内存结构?

本文系统解析了JVM的两大核心概念:基本结构和内存结构。JVM基本结构由类加载子系统、运行时数据区、执行引擎等5大部件组成,协同完成字节码加载到执行的全流程。重点剖析了JVM内存结构(运行时数据区),包括线程共享的堆(存储对象实例)和方法区(类元信息),以及线程私有的程序计数器、虚拟机栈和本地方法栈。通过代码示例验证了堆溢出、元空间溢出和栈溢出场景,并对比了JDK8的内存结构改进(永久代改为元空间)。最后总结了核心面试考点,如内存分区特性、OOM场景等,帮助深入理解JVM运行机制。

X13100387636的博客 751

JVM的基本结构

JVM的基本结构java虚拟机的基本结构如图:1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。2)java堆在虚拟机启动的时候建立,它是java程序最主要的内存工作区域。几乎所有的java对象实例都存放在ja

sicofield的专栏 1236
上一篇: 什么是可重入锁?
下一篇: Java中JVM内存结构(完整)
sevevty-seven
博客等级 码龄2年 757粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值