一篇教会你java内存图怎么画

news2024/11/23 22:08:40

首先我们要知道:

  • 线程的本质是
  • 程序执行时,在java栈中,成立一个线程栈,调用方法时方法不断压栈出栈,这个压栈出栈的过程就是线程执行的过程
  • 方法执行 拷贝入栈 ,执行完成 出栈,从第一个线程入栈开始到最终出栈,就是一个线程的过程。

java内存图

以下段代码为例画内存图

public class Test {
    public static void main(String[] args) throws Exception {
        Person x1 = new Person();
        Person x2 = new Person();
        Person x3 = new Person();
        m1();
        x1.m1();
    }
        public static void m1(){
            m2();
        }
        public static void m2(){
            m3();
        }
        public static void m3(){
            Person x1=new Person();
            x1.m2();
        }
        public static void m4(){

        }
    }
public class Person {
    
    public void m1() {
    }
    public void m2() {
        m3();
    }
    public void m3() {
    }
}

1、java文件在硬盘上,通过编辑器编译为.class文件,类信息文件首先加载进方法区中。

2、我们有Person类和Test类,将这些类信息加载到方法区,对于Test中的5个静态方法main \ m1 \ m2 \ m3 \ m4会在方法区额外开辟一块地方存放,即静态域

3、首先主方法执行, 主方法被拷贝一份入栈。

  3.1、Person x1=new Person() ,Person x2=new Person(),Person x3=new Person()new出来的对象在方法堆中。

  3.2、变量后边的数字表明的是对应地址

  3.3、如果Person类中加入变量怎么画? -- 一样的道理

  • 只需要在方法区Person内加入变量,new出来到堆里也增加相应变量就行了

  3.4、如果Person类中添加静态方法呢?

  • 静态属性需要在方法区内的静态域存放
  • static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改
  • 注意new出来放入堆中的对象属性,不管是变量还是方法都是非静态的

4、接着调度m1(),m1()拷贝入栈;m1()中调度m2(),m2()拷贝入栈;m2()中调度m3(),m3()拷贝入栈;

5、m3()中new了个对象x1,这个对象在堆中创建

6、x1调度了方法m2(),x1对象内的m2()拷贝入栈(注意是从堆那边拷贝入栈)

7、接着x1调度了方法m2(),但m2()方法内调度了m3(),m3()拷贝入栈;

8、m3运行完后出栈,m2方法是调度m3,运行完后也出栈

9、接下来是T.m3(),已经运行完了也出栈,同时创建的对象x1也会被销毁;

10、在堆中的x1对象由于地址没有被记录了,也随之销毁

11、接着调度m3的m2()完成任务后也出栈

12、调度m2的m1()完成任务后也出栈

13、m1()完成后,主方法内还有x1.m1() 待执行;

14、将x1的m1()拷贝入栈

15、x1.m1() 执行完后,m1()出栈

16、这时主方法已经全部执行完毕,主方法出栈

17、主方法内的变量销毁,以及堆中对应的对象没有地址指向后也随之销毁

这就是java执行过程的内存图。

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

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

相关文章

leetcode刷题详解十一

⭕️583. 两个字符串的删除操作 思路:核心代码就是最长公共子序列,但是需要注意的是结果 就是如果说公共子序列为0,则需要两个字符串长度的才行 如果有,就是 n m ∗ 2 d p [ n ] [ m ] nm*2dp[n][m] nm∗2dp[n][m] int minDist…

企业人力资源公司抖音直播招聘断播怎么处理?

企业人力资源公司抖音直播招聘断播怎么处理? 最直接的处理方式就是进行抖音直播招聘报白,报白后在直播和视频中发布招聘和企业信息,不用担心被封禁和限制流量。 可以通过抖音直播进行招聘,也可以在视频中添加小程序,…

服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例

服务器数据恢复环境: 某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。 服务器故障&检测: 服务器在运行过程中突然瘫痪,管理员对服务器进行了重装…

LINUX入门篇【11】---进程篇【3】---进程优先级,进程切换,进程调度

前言: 有了前面知识点的铺垫,本篇我们将围绕进程的三个方面来展开,即进程优先级,进程切换以及进程调度的问题,这里的进程调度其实本质就是CPU是如何去调度进程的。 进程优先级: 优先级的概念&#xff1a…

数字人透明屏幕是如何工作的?

数字人透明屏幕是一种令人兴奋的科技产品,它结合了人脸识别、全息影像技术以及透明屏幕,为人们带来了全新的互动体验。本文将详细介绍数字人透明屏幕的工作原理以及其应用场景。 工作原理 数字人透明屏幕的工作原理主要包括人脸识别和全息影像技术。人脸…

解决ant-design-vue中Select组件v-model值为空字符串不显示placeholder的bug

方法一: 1.找到node_modules/ant-design-vue/es/vc-select/SingleSelector.js文件 搜索renderPlacehoder方法 将其修改为 const renderPlacehoder () > {const list props.values.filter(val > val.value ! );if (list[0]) {return null}... }2.在此文件中…

浅谈硬件连通性测试几大优势

硬件连通性测试是确保硬件系统正常运行、提高系统可靠性和降低生产成本的关键步骤。在现代工程和制造中,将连通性测试纳入生产流程是一个明智的选择,有助于确保硬件产品的质量和性能达到最优水平。本文将介绍硬件连通性测试的主要优势有哪些! 一、提高系…

区域人员定位管理系统功能

人员定位管理系统是集计算机软硬件、信息采集处理、无线数据传输、网络数据通讯等技术多学科综合应用为一体的自动识别信息技术产品,实现对不同物体(包括人)在不同状态(移动、静止)下的自动识别,特定区域人…

深度学习框架配置

目录 1. 配置cuda环境 1.1. 安装cuda和cudnn 1.1.1. 显卡驱动配置 1.1.2. 下载安装cuda 1.1.3. 下载cudnn,将解压后文件复制到cuda目录下 1.2. 验证是否安装成功 2. 配置conda环境 2.1. 安装anaconda 2.2. conda换源 2.3. 创建conda环境 2.4. pip换源 3.…

2004-2022年上市公司托宾Q值数据

2004-2022年上市公司托宾Q值数据 1、时间:2004-2022年 2、指标:年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、托宾Q值 3、范围:上市公司 4、来源&#…

Redis 的过期策略都有哪些?

思考:假如redis的key过期之后,会立即删除吗? Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略…

leetcode:用栈实现队列(先进先出)

题目描述 题目链接:232. 用栈实现队列 - 力扣(LeetCode) 题目分析 我们先把之前写的数组栈的实现代码搬过来 用栈实现队列最主要的是实现队列先进先出的特点,而栈的特点是后进先出,那么我们可以用两个栈来实现&…

python与机器学习1,机器学习的一些基础知识概述(完善ing)

目录 1 AI ,ML,DL,NN 等等概念分类 1.1 人工智能、机器学习、深度学习、神经网络之间的关系: 1.2 人工智能的发展 2 ML机器学习的分类:SL, USL,RL 2.1 机器学习的分类 2.2 具体的应用举例 2.3 数据分类 3 关于阈值θ和偏移量b的由来 4 不同的激…

【LeetCode:1670. 设计前中后队列 | 数据结构设计】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

​无人机摄影测量

无人机摄影测量技术是传统航空摄影测量手段的有力补充,具有机动灵活、高效快速、精细准确、作业成本低、生产周期短、影像获取空间分辨率高、高危地区探测等优势。无人机与航空摄影测量相结合使得“无人机数字低空遥感”成为航空遥感领域的一个崭新发展方向。无人机…

【古月居《ros入门21讲》学习笔记】16_tf坐标系广播与监听的编程实现

目录 说明: 1. 实现过程(C) 创建功能包(C) 创建tf广播器代码(C) 创建tf监听器代码(C) 配置tf监听器与广播器代码编译规则 编译并运行 编译 运行 2. 实现过程&a…

全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码

源码简介: 全新仿某度文库网站源码/在线文库源码,是以phpMySQL开发的,它是仿某度文库PHP源码。有功能免费文库网站 文档分享平台 实现文档上传下载及在线预览。 仿百度文库是一个以phpMySQL进行开发的免费文库网站源码。仿某度文库实现文档…

API网关

API网关的作用 下图显示了详细信息。 步骤 1 - 客户端向 API 网关发送 HTTP 请求。 步骤 2 - API 网关解析并验证 HTTP 请求中的属性。 步骤 3 - API 网关执行允许列表/拒绝列表检查。 步骤 4 - API 网关与身份提供商对话以进行身份​​验证和授权。 步骤 5 - 将速率限制规…

卓越进行时 | 西安交通大学校友莅临赛宁网安参观考察

近日,为了深入贯彻网络安全强国战略建设,积极发挥网络安全企业的先进作用,推动校企合作与协作共赢。西安交通大学领导携校友会来到赛宁网安网络安全卓越中心进行参观考察,为进一步的校企合作和产业孵化奠定基础。 活动期间&#…

考虑区域多能源系统集群协同优化的联合需求侧响应模型程序代码!

本程序参考中国电机工程学报论文《考虑区域多能源系统集群协同优化的联合需求侧响应模型》,文章使用关系矩阵来表示电、热、气的耦合关系,使用NSGA2方法对多目标优化方法进行求解,文章中考虑环境因素是目前研究的热点。程序中算例丰富&#x…