3. JVM 运行时数据区

news/2025/10/17 19:01:04/文章来源:https://www.cnblogs.com/hzsblog/p/19148449

本文内容基于个人对特定技术的理解和实践,或为对相关技术内容的整理与分享。请读者批判性阅读,如有疏漏或不准确之处,恳请斧正。

接续 2.JVM的类加载机制

类被加载到内存后,会保存在方法区或元空间中,根据JVM的划分,这部分内存归属于为线程共享的内存空间。
以下JVM内存空间是按照JVM Spec 中线程访问的规则进行划分(直接内存不属于JVM Spec):
image

线程共享的内存区域

  1. 堆内存
    创建的对象和数组一般分配在堆内存中,所以在多线程下访问对象的时候需要确保线程安全。堆内存设置为动态的,其空间是由GC进行处理的,为对象分配内存时,如果堆内存占用满了,并且GC还无法收回需要的空间,就会触发OOM
  2. 方法区/元空间
    其中存储着每个类的结构,例如运行时常量池、字段和方法数据以及方法和构造函数代码。JIT compiled code 也是该区域的一个重要内容。这个区域可以选择是否为动态大小以及是否可以被垃圾回收(针对常量池的回收和对类型的卸载)。在逻辑上方法区与堆的性质是一样的,如果内存空间不足以分配,也会触发OOM
  3. 堆外内存
    包含直接内存以及JVM使用的内存(例如 元空间),可以避免JVM管理、回收对象所造成的资源、性能的浪费。避免了数据在Java堆和操作系统本地缓冲区之间的来回复制,提高了I/O效率(即零拷贝)。如果堆外内存不足以支持JVM的分配,也会触发OOM

线程私有的内存区域

  1. 程序计数器
    每个线程持有一份私有的,在JVM 中保存着当前线程正在执行的字节码的地址(执行本地方法时为空),宽度足够支撑当前平台所有的指令,
  2. 虚拟机栈
    每个线程持有一份虚拟机栈,由多个栈帧构成。执行方法时,会为该方法创建一个栈帧并压入栈中。栈帧是方法运行所需数据的结构化表示。

image

栈帧的结构和大小在编译时确定,其中动态链接就是触发类加载的一个条件,当动态链接转换为具体方法时,没有找到对应的类,就会触发加载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软工学习日志

今天上午尝试将hbase链接到idea,结果hbase出错了,后来发现是hadoop没启动,再试一次发现还是不行,一看log好像是上次启动在zookeeper残留的数据影响了,删除残余数据后重启hbase就okl

Pixelium Design:Vue3 的像素风 UI 组件库

👾 Pixelium Design:Vue3 的像素风 UI 组件库 Pixelium Design 是一个基于 Vue 3 的像素风 UI 组件库。我们从早期像素游戏的经典美学中汲取灵感,为现代 Web 应用带来复古风格的界面和体验。该项目的初衷是为开发者…

修电脑不求人:AI智能修复电脑工具的体验分享

前言 在日常工作和生活中,电脑偶尔出点小问题几乎是常态。 开机变慢、鼠标右键卡顿、桌面图标消失、系统响应迟缓,这些看上去不算严重的“小毛病”,往往足够让人心烦。 对很多人来说,修电脑的门槛不在“不会”,而…

效率与安全双升:AI许可证识别重塑医药行业合规流程

在关乎国计民生的医药行业,安全与效率是永恒的主题。医药供应链条长、参与方众多,从生产商、分销商、物流商到最终的药店和医疗机构,任何一个环节的疏漏都可能导致假药、劣药流入市场,威胁公众健康。在此背景下,药…

详细介绍:CI/CD流水线优化:GitLab CI镜像构建加速实战​

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Spring BeanPostProcessor 前置处理 afterPropertiesSet BeanPostProcessor 后置处理区别

目录1. BeanPostProcessor 前置处理(postProcessBeforeInitialization)2. afterPropertiesSet(InitializingBean接口方法)3. BeanPostProcessor 后置处理(postProcessAfterInitialization)总结:执行顺序与核心区…

Xcode上编译调试ffmpeg - 详解

Xcode上编译调试ffmpeg - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

最新版Origin 2025b安装包下载及详细安装教程,附永久免费中文汉化破解版Origin安装包

一、Origin 2025b软件下载: 1、软件名称:Origin 2025b 2、软件大小: 2.17 GB 3、安装环境:Win 7及以上系统 4、下载链接:https://pan.quark.cn/s/4b5bec93aae5 二、Origin 2025b安装教程 注意!!!开始解压安装前…

《程序员修炼之道》阅读笔记1

读《程序员修炼之道》时,书中 “DRY 原则” 这部分内容,几乎是一下子就抓住了我的注意力 —— 原来 “别重复写代码” 这件事,不是随口说说的习惯,而是有明确逻辑支撑的实践准则。​ 书里把 DRY 原则解释为 “不要…

c语言单向链表操作

typedef struct nodes_t {int data;struct nodes_t* next; }nodes_t;static nodes_t* head_point = NULL;nodes_t* createNode(nodes_t *node) {nodes_t *p1;if (node == NULL) {return head_point;}if (head_point ==…

Unity3D中定义全局宏(不同于在unity设置中的)

一、准备 BuildSetting中查看使用的.Net版本。 二、创建宏文件 .Net3.5 ,在Asset目录下面创建一个.txt文件,名字修改成mcs.rsp。 可以用Vs Code打开,也可以用文本编辑器打开。具体书写格式为:-define:UNITY_5X .Ne…

第十七篇

今天是10月17号,今天没课多休息一整天,写完了离散作业。

AtCoder arc208 总结

AtCoder arc208 总结 A 猜想 SG 是 \(a_1\oplus a_2\oplus \cdots \oplus a_n \oplus (a_1 \or a_2 \or \cdots \or a_n)\)。然后发现过了。 B 发现当 \(a_i=\lfloor\dfrac{a_{i+1}}2\rfloor +1\) 时 \(\sum (a_{i+1}-…

OOP - 实验一

任务1:代码:#include <iostream> #include <string> #include <vector> #include <algorithm>template<typename T> void output(const T &c); void test1(); void test2(); void…

题解:qoj8329 Excuse

题意:给出一个数 \(n\),现在我通过下面这个算法生成一个长为 \(n\) 的序列 \(a\)。先进行 \(n\) 次随机扔一个硬币,然后如果你最后连续 \(k\) 次投出的是正面朝上,那么就将一个 \(k\) 加入序列末尾。问序列 \(a\) …

`uv run pytest` does not work

错误信息 uv初始化的python项目下,执行 uv run pytest 提示错误信息:❌Failed to canonicalize script path解决方法: 1,编辑 pyproject.toml,并保存: [tool.pytest.ini_options] pythonpath = ["."]2,…

VMware17.6图文安装教程(附安装包)VMware17.6

一、VMware17.6下载 1.官方正版VMware下载链接下载链接https://pan.quark.cn/s/6827b0764042 二、VMware17.6软件介绍 VMware Workstation Pro 17.6是一款功能强大的桌面虚拟化软件,以下是其相关介绍: 功能特性 多操…

Sourcetree - Git 备份

在 Sourcetree 中使用 git bundle 打开 Sourcetree 的内置终端: 在 Sourcetree 中打开你的仓库。 寻找 “终端”(Terminal) 标签页或相关功能。这通常在 Sourcetree 的主界面底部或某个侧边栏中。如果找不到,可以尝…

uni-app x实现上下拉动,动态加载数据

一、概述 上一篇文章,已经实现了商品列表组件封装以及使用。 但是商品列表页面,还需要实现,上下拉动,动态加载数据。 效果如下:二、onReachBottom onReachBottom是微信小程序页面生命周期中的回调函数,用于检测页…

HyperWorks许可状态监控工具

在现今日益复杂的工程设计与仿真环境中,对软件许可状态的有效监控已成为确保工作流程顺畅、资源高效利用的关键。为了满足这一需求,HyperWorks推出了强大的许可状态监控工具,帮助用户实时了解许可使用情况,优化资源…