请简述 Java 的内存模型,以及栈、堆、方法区分别存储什么内容?

news/2025/4/1 19:22:10/文章来源:https://www.cnblogs.com/cabbagehp/p/18801022

jdk8以前

jdk8以后

内存分出的数据区域:程序计数器Java 虚拟机栈本地方法栈方法区运行时常量池字符串常量池

栈:

局部变量表:存放方法参数和方法内定义的局部变量,包括基本数据类型(byte、short、int、long、float、double、char、boolean )以及对象引用。例如在一个方法中定义 int num = 10; ,这个 num 就存储在局部变量表中。
操作数栈 :方法执行过程中,用于存储操作数和运算结果。比如进行 int a = 1 + 2; 运算时,1 和 2 先压入操作数栈,运算后结果 3 也在操作数栈中暂存。
动态链接:Java 虚拟机栈中每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的符号引用,用于支持方法调用过程中的动态链接。
方法返回地址:当方法执行完成后,需要返回调用它的地方,这个地址就存储在此处。

存储内容:是 Java 虚拟机管理的最大一块内存区域,几乎所有的对象实例和数组都在堆上分配内存。例如使用 new 关键字创建对象,如 Object obj = new Object(); ,这个新创建的 Object 实例就存放在堆中。堆也是垃圾回收器主要管理的区域,会根据对象的存活情况进行垃圾回收,释放不再使用的内存空间。

方法区

类信息:包括类的全限定名、父类信息、接口信息、字段信息、方法信息等。比如定义一个 class Person ,这个类的相关结构信息就存储在方法区。
常量:如静态常量,像 public static final int MAX_VALUE = 100; 中的 MAX_VALUE 就存放在方法区。
静态变量 :类中定义的静态变量,如 public static int count = 0; ,count 存储在方法区。
即时编译器编译后的代码:Java 虚拟机的即时编译器(JIT)会将一些热点代码编译成机器码,编译后的代码存放在方法区。 此外,运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。

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

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

相关文章

基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];gen = 0; Js = 0.5*rand(NIND,1); Objv = (Js+eps); gen =…

project4

完结撒花!记录一下 Bustub Concurrency Control 的实现过程。 Resourceshttps://15445.courses.cs.cmu.edu/fall2022 课程官网 https://github.com/cmu-db/bustub Bustub Github Repo https://www.gradescope.com/ 自动测评网站 GradeScope,course entry code: PXWVR5 https:…

backup 攻防世界 index.php 备份文件。

点进去看到的: index.php 文件经常有备份,要安全嘛,常用的备份文件有: index.php.bak index.php.swp index.php~ index.php.old index.php.backup 试出来就能有flag了

06_Redis之事务控制

本文介绍Redis的事务控制。06_Redis之事务控制三、事务控制 简单事务控制取消事务有原子性吗? redis的事务是没有原子性的,也就是在事务中每一条命令执行成功与否,对其他命令没有影响乐观锁悲观锁 悲观锁:每次拿数据的时候,认为其他线程会对共享资源进行修改,所以每次都要…

05_Redis之集群

本文将依次介绍 Redis 中的复制、哨兵(sentinel)和集群(cluster)的使用和原理。05_Redis之集群 现实中的项目通常需要若干台Redis服务器的支持: (1)从结构上,单个 Redis 服务器会发生单点故障,同时一台服务器需要承受所有的请求负载。这就需要为数据生成多个副本并分配…

CDR-文档操作

CDR的文档、视图、对象的基本操作--本篇导航--文档操作(新建、保存、导出) 视图操作(缩放、移动) 对象操作(移动、旋转、缩放、复制、颜色) 编辑工具栏 辅助线界面及工作流程 工作流程:新建文档,在文档中输入文字、图形、或导入外部的图片做排版,可新建多个页面,保存…

1010 图之图

\(因为题解感觉已经很周到了仅为不懂根号分治复杂度的做一个补充\) \(就是反向插入边时这样的点最多有m/lim个 那么平均到每个位置所贡献的压力也为m/lim\)#include<bits/stdc++.h> #define int long long #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),…

Linux系统ubuntu20.04 无人机PX4 开发环境搭建

安装Ubuntu对应版本的Ros 此处省略 PX4固件下载PX4的源码处于GitHub,因为众所周知的原因git clone经常失败,此处从Gitee获取PX4源码和依赖模块。git clone https://gitee.com/voima/PX4-Autopilot.git使用cd命令切换到 px4项目文件目录:cd ~/PX4-Autopilot #切换到1.14.0分支…

jmeter性能测试(2)——插件和nmon

一、性能插件认识1.在jmeter中添加性能插件2.下载两个jar包和启动包3.存放路径 (1)路径1(2)启动插件(4)将所有插件添加到线程中 常用的性能指标插件 1. jp@gc - Bytes Throughput Over Time:不同时间吞吐量展示(图表) 聚合报告里,Throughput是按请求个数来展示的,比如…