news 2026/7/6 7:37:34

JVM篇-JVM主要组成部分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JVM篇-JVM主要组成部分

JVM主要由类加载子系统,运行时数据区,执行引擎,本地方法接口,,本地库组成

1.类加载子系统

负责加载、链接和初始化类文件(.class)。类加载过程分为三步:

加载:查找并读取字节码文件到内存。

链接:验证字节码、分配静态变量内存、解析符号引用。

初始化:执行静态代码块和静态变量赋值。

2.运行时数据区
方法区:

存储类元数据、常量池等,JDK1.7之前通过永久代实现,JDK1.8之后通过元空间来实现.

堆:

存放对象实例和数组(线程共享)

虚拟机栈:

存储栈帧(局部变量、操作数栈等),每个线程独占。

本地方法栈:

支持本地方法(如C/C++代码)调用。

程序计数器:

记录当前线程执行的字节码指令地址。

3.执行引擎

解释或编译字节码为机器码并执行

解释器:

逐行解释字节码,启动速度快但效率低。

即时编译器:

将热点代码编译为本地机器码(如HotSpot的C1/C2编译器)。

垃圾回收器:

自动回收堆内存中的无用对象(如Serial、G1、ZGC等算法)。

4.本地方法接口

提供调用非Java代码(如C/C++库)的能力,通过native关键字声明方法。

5.本地库

JVM依赖的底层系统库(如文件操作、线程管理等),通过JNI与操作系统交互。

补充:

1.对于局部变量,栈帧这些变量无需考虑线程安全问题,对于对象实例和数组则需考虑线程安全问题
2.栈的内存溢出分为栈帧过多(无递归出口或递归次数过多)和栈帧过大来两种情况,其中第一种情况较为常见
3.jvm相关的指令

jmap(Java Memory Map)是JDK提供的一个命令行工具,主要用于生成Java堆内存的详细信息。它可以帮助开发者分析内存使用情况、对象分布以及内存泄漏问题。

jmap(Java Memory Map)是JDK提供的一个命令行工具,主要用于生成Java堆内存的详细信息。它可以帮助开发者分析内存使用情况、对象分布以及内存泄漏问题。

jstack 是 JDK 自带的命令行工具,主要用于生成 Java 虚拟机(JVM)中线程的快照(Thread Dump),帮助开发者分析线程状态、定位死锁、线程阻塞等问题。

javap是 JDK 自带的命令行工具,用于反编译 Java 类文件,显示类的成员、方法签名、字节码等信息。它通常用于调试、分析类文件结构或理解编译后的代码行为。基本语法为javap [options] <classname>

JVisualVM 是 Java 虚拟机(JVM)监控和性能分析工具,集成在 JDK 中,支持本地和远程 JVM 监控。它提供内存、线程、CPU 分析等功能,适用于开发和生产环境的问题诊断。

4.对于jdk1.6之前和jdk1.6之后有一个区别,那就是串池中存储的对象发生变化,1.6之前存字符串的副本,1.6之后存字符串的引用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/27 1:36:31

2026打工人必看:这些看似正常的文件,可能是木马的入口

打工人必看&#xff1a;这些看似正常的文件&#xff0c;可能是木马的入口一个你以为只是普通 Excel 的文件&#xff0c;打开后可能已经把整台电脑交给了陌生人。一、先说一个真事 2025年8月&#xff0c;上海浦东一家公司&#xff0c;财务刘女士被拉进一个"工作群"&am…

作者头像 李华
网站建设 2026/6/27 1:34:15

在POSIX线程中正确处理无参数函数

在编写C语言程序时,如果你尝试使用POSIX线程(pthreads)来创建线程,你可能会遇到一些与函数声明和原型相关的警告和错误。下面我们通过一个实例来展示如何正确地处理这些问题,确保代码的兼容性和规范性。 背景介绍 假设我们有一个名为thread_function的函数,它不接受任何…

作者头像 李华
网站建设 2026/6/27 1:26:40

我终于知道,Codex 为什么需要一块无限画布了

写在前面 最近无限画布这个选题挺火。 一开始我其实没有太大感觉。因为“无限画布”这几个字&#xff0c;听起来很容易让人误会成一个更大的白板&#xff1a;能拖拽、能放图、能写标注&#xff0c;仅此而已。 但这几天我真正用 Codex 跑贴图、改图、调整辫子哥哥 IP 之后&#…

作者头像 李华
网站建设 2026/6/27 1:24:56

CSS Flexbox布局的精妙应用

在现代网页设计中,如何高效地排列元素是一个常见的问题。今天我们将深入探讨CSS Flexbox布局的应用,特别是如何解决卡片布局中的常见问题。 问题描述 假设你有一个网页,需要展示多张卡片,每张卡片包含一个图片和一些文本描述。通常,我们希望这些卡片能够并排显示,而不是…

作者头像 李华
网站建设 2026/6/27 1:22:07

解决django.db.utils.OperationalError: attempt to write a readonly database错误

飞牛Nas 部署gitea 并迁移新机器及备份YOLOv11改进 | RFAConv重塑空间注意力助力性能提升爬虫与自动化技术深度解析&#xff1a;从数据采集到智能运维的完整实战指南——企业级实时数据闭环构建(基于江协科技)51单片机入门&#xff1a;4.矩阵键盘软考 系统架构设计师系列知识点…

作者头像 李华
网站建设 2026/6/28 19:31:26

如何快速上手SDR++:跨平台软件定义无线电的终极解决方案

如何快速上手SDR&#xff1a;跨平台软件定义无线电的终极解决方案 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus SDR是一款功能强大、界面直观的跨平台软件定义无线电&#xff08;SDR&#…

作者头像 李华