【JVM】java内存区域

目录

一、运行时数据区域

1、方法区

2、堆

3、虚拟机栈

4、本地方法栈

5、程序计数器

6、运行时常量池

二、HotSpot虚拟机的对象

1、对象的创建

指针碰撞:

空闲列表:

2、对象的内存布局

对象头

实例数据

对齐填充

3、对象的访问定位

句柄

​编辑

直接指针


一、运行时数据区域

1、方法区

用于存储类的信息(包括类的字段、方法、静态变量、常量)方法区是被所有线程共享的区域。


2、堆

用于存储对象实例和数组。堆是Java程序中最大的内存区域,堆也是被所有线程共享的区域。
在堆中分配的对象实例可以通过垃圾回收来进行自动内存管理。


3、虚拟机栈

每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。


4、本地方法栈

与虚拟机栈类似,但用于执行本地方法的调用。


5、程序计数器

每个线程都有一个程序计数器,通过改变这个计数器的值来选取下一条需要执行的字节码指令。线程切换时,程序计数器的值会被保存和恢复。各个线程之间计数器互不影响,独立存储。


6、运行时常量池

用于存放编译期生成的各种字面量与符号引用,在类加载后放到运行时常量池。(它是方法区的一部分)

二、HotSpot虚拟机的对象

1、对象的创建

在java创建对象时,我们都知道是使用new关键字。在虚拟机执行new指令时,首先检查这个类是否已经被加载、解析,检查没通过就执行类加载过程,检查通过则为新对象分配内存。

分配内存有两种常用方式:“指针碰撞” 和 “空闲列表”

指针碰撞:

使用一个指针来标记已分配和未分配内存之间的边界。在内存分配时,指针根据对象所需内存大小进行移动,指向新的分界位置。

适用于:已用内存和空闲内存分布在两侧

空闲列表:

维护一个记录空闲内存块的列表来进行内存分配和释放。列表中的每个条目包含了空闲块的起始地址和大小。

适用于:已用内存和空闲内存相互交错

2、对象的内存布局

在虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头、实例数据和对齐填充。

对象头
对象头部分包括两类信息:第一类是Mark word(如下表),第二类是类型指针(虚拟机通过这个指针来确定该对象是哪个类的实例)

实例数据

对象真正存储的有效信息。

对齐填充

仅仅起着占位符的作用。(虚拟机要求对象起始地址必须是8字节的整数倍)

3、对象的访问定位

java虚拟机对于对象的访问方式主要是两种:句柄和直接指针

句柄

划分一块内存作为句柄池,reference中存储的就是对象的句柄地址。

优点:移动对象更方便(只需改引用)

直接指针

优点:访问速度快,节省内存

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一种基于 RFID 技术的养老院人员定位解决方案

在今日的中国社会结构老龄化日趋增长,带来了一系列的社会问题。社会老龄化、高龄化、空巢化和病残化的迅速发展,将使得越来越多的老人住进养老院。养老院主要为老人提供集体居住,并具有相对完整的配套服务设施。养老院管理的最终目的就是为老…

【Qt 学习笔记】Qt常用控件 | 输入类控件 | Combo Box的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 输入类控件 | Combo Box的使用及说明 文章编号&#xff…

张大哥笔记:普通人如何搞钱?

追求短期利润和长期价值相结合的创业方式,是我一直倡导的。短期内寻求盈利的项目进行快速变现,比如各种小风口项目,而长期项目则需保持数年乃至10年不变,比如自媒体内容输出,做有长期价值的事情! 短期项目通…

详解MySQL C API 相关接口(大白话就是:MySQL的c语言怎么写)

文章目录 1、C API 官方文档2、初始化 MYSQL3、连接 MySQL设置连接字符集(使得客户端编码方式匹配) 4、下发 mysql 指令5、获取 mysql 查询结果(保存起来)获取行与列遍历存储结果 6、释放 MYSQL\_RES 对象7、关闭 MySQL 连接8、总结 1、C API 官方文档 …

Linux安装Docker的多版本PHP和多版本MySQL共存

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…

(一)Amira入门实例

1.打开Amira安装目录下的数据Foam.am图片,打开之后选择“um”选项。 2. 添加一个2D和3D显示组件,即Ortho Slice和Volume Rendering,分别为2D显示和3D显示(模块左侧绿点控制是否显示): 颜色反转之后&#xf…

C# GetField 方法应用实例

目录 关于 C# Type 类 GetField 方法应用 应用举例 心理CT设计题 类设计 DPCT类实现代码 小结 关于 C# Type 类 Type表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。调用 t…

第十五届蓝桥杯省赛第二场C/C++B组G题【最强小队】题解

20pts 枚举所有可能的左端点、右端点,时间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于每个区间进行遍历检测,时间复杂度 O ( n 3 ) O(n^3) O(n3)。 100pts 由于数据范围为 1 0 5 10^5 105,所以肯定只能进行一次枚举。 我们尝试枚举右端点&…

winform实现的调用bartender打印工具-标签模版管理

生产型企业基本都有条码追溯管理的需求&#xff0c;不同的产品有不同的标签样式规格以及内容&#xff0c;打印的条码往往需要追溯以及防重校验&#xff0c;因此市面有很多打印软件&#xff0c;今天分享基于winform开发的调用bartender标签的工具。 先上效果图 /// <summary…

软考 - 系统架构设计师 - 设计模式

目录 概念 创建型设计模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 优点 缺点 应用场景 总结 构建器模式&#xff08;Builder Pattern&#xff09; 优点 缺点 应用场景 工厂方法模式&#xff08;factory method&#xff09; 优点 缺点 应…

AES 加解密(包含JS、VUE、JAVA、MySQL)工具方法

介绍 AES 是 Advanced Encryption Standard 的缩写&#xff0c;是最常见的对称加密算法。AES 在密码学中又称 Rijndael 加密法&#xff0c;是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES&#xff0c;已经被多方分析且广为全世界所使用。 基本原理&#…

3.8设计模式——State 状态模式(行为型)

意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构 Context&#xff08;上下文&#xff09;定义客户感兴趣的接口&#xff1b;维护一个ConcreteState子类的实例&#xff0c;这个实例定义当前状态。State&#xff08;状态&#xff09;定义…

微软发布!提示工程进化为位置工程,有效提升RAG与上下文学习

别再光顾着优化提示工程啦&#xff01;微软最近推出位置工程研究思路&#xff0c;只需调整token的索引位置&#xff0c;而不修改文本本身&#xff0c;就能显著提高任务性能。 提示工程通过添加、替换或删除段落和句子改变提示&#xff0c;调整语义信息&#xff0c;激发LLMs的推…

Leetcode刷题之——队列Queue|先入先出FIFO|广度优先搜索BFS|栈Stack|后入先出LIFO|深度优先搜索DFS

Leetcode刷题之——队列Queue|先入先出FIFO|广度优先搜索BFS|栈Stack|后入先出LIFO|深度优先搜索DFS 1. 队列(Queue)——FIFO&#xff0c;先入先出的数据结构1.1 循环队列1.2 内置队列的常用方法&#xff08;C&#xff09;1.3 广度优先搜索&#xff08;BFS&#xff09; 2.栈(St…

Unity Meta Quest MR 开发(七):使用 Stencil Test 模板测试制作可以在虚拟与现实之间穿梭的 MR 传送门

文章目录 &#x1f4d5;教程说明&#x1f4d5;Stencil Test 模板测试&#x1f4d5;Stencil Shader&#x1f4d5;使用 Unity URP 渲染管线设置模板测试⭐Render Pipeline Asset 与 Universal Renderer Data⭐删除场景中的天空盒⭐设置虚拟世界的层级 Layer⭐设置模板测试 &#…

详解Qt中的鼠标事件

在Qt中&#xff0c;处理鼠标事件是构建交互式界面的关键。Qt提供了一系列与鼠标相关的事件处理函数&#xff0c;允许开发者捕获鼠标的各种动作&#xff0c;如按下、释放、移动、双击等。以下是鼠标事件的使用方法、技巧以及注意事项&#xff0c;并附带C代码示例。 基础使用方法…

Git学习笔记(四)远程仓库

根据前面几篇文章的介绍&#xff0c;在本地使用Git基本不成问题了&#xff0c;常用的基本命令和一些基本概念基本也介绍完毕了。这一张主要讲讲远程仓库的创建和使用。 概念 其实在前面第一篇文章中&#xff0c;我们就简单介绍过远程仓库&#xff0c;它其实就是一个托管在远程服…

ROS标定海康威视摄像头

ROS视摄像头标定----海康威视 引言&#xff1a; ​ 摄像头标定是为了确保视觉系统能够准确反映现实世界中的对象&#xff0c;并消除图像中的畸变效果。在本实验中&#xff0c;我们使用了ROS中的功能包进行摄像头标定。标定的原理包括畸变校正和摄像头参数估计。通过移动标定板并…

java 创建和请求sse服务

主要依赖 <!--spring-boot父工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent><dependency><gro…

SAP采购订单-条件类型-配置开发步骤

由于采购业务变更&#xff0c;需要创建新的价格类型&#xff0c;并添加新的计算逻辑计算。首先在例程&#xff08;VOFM&#xff09;中创建计算逻辑&#xff0c;然后在系统配置&#xff08;SPRO&#xff09;中找到配置点&#xff0c;创建新的条件类型‘ZMM00’,创建定价过程‘ZM…