Java基础06(代码运行时的内存图)

目录

一、引入

二、Java下的内存分配

1.类信息常量池和静态常量池

2. 栈和字符串常量池

(引进)线程

3.⭐程序计数器作用⭐(程序计数器配合栈使用)

总结Java内存:

(引进)驱动

三、引用传递和值传递

值传递:Java,C,C++

引用传递和值传递的具体应用场景:

引用传递和值传递的优缺点:


一、引入

进程都是在内存中独占一块空间互不干扰:

操作系统就是C语言写的(硬件驱动是C语言,相互适配可以达到更优速度,所以操作系统也是C语言编写),所以操作系统只认识C语言,其他高级语言最终也会被翻译成C语言,即能在操作系统上运行的语言,本质上都被转化成C语言了。

不管何种语言,本质上都是通过C语言向操作系统申请足够大的一段数组,如下Java版本(指针划分):

二、Java下的内存分配

1.类信息常量池和静态常量池

【如上所示:静态可以被非静态调用(静态常量池内的静态方法和变量相当于设计图中已经被造好的零件,可以直接使用);非静态能被非静态调用(非静态相当于图纸设计图,互相能够'摘抄'调用),但是非静态不能被静态调用(即:图纸不能被零件调用)】

2. 栈和字符串常量池

一个方法被调度时,入栈,当这个方法位于栈首时,则将处于运行状态,否则不会运行,当且仅当其处于栈首时,才会再次运行;

方法被调用进栈,是被拷贝一份进栈,而不是直接存入栈;

String和int类型不同,String类型的句柄和值不在一块,这是因为一旦String类型的值发生改变,其内部所占用内存也会发生改变,但是int类型不管如何变动,都是32bit;

 

如图表示,Person类中的静态方法相当于只有一份固定放在静态常量池,而非静态方法(相当于图纸),被new多少次,就有多少份;

静态方法可以通过类.或方法名.调用,非静态方法只能通过方法名.的方法调用;

一个对象在内存中实际(左图和右图):

其他地方申请的空间会被Java摧毁自动回收,但是常量池中的不会,具体参见这篇文章--->一篇帮你搞懂Java常量池-CSDN博客

(引进)线程

进程是由线程组成的,线程是-->依托栈结构,完成了一条线的方法的调用;线程的组成单位是方法。

3.⭐程序计数器作用⭐(程序计数器配合栈使用)

  • 控制指令顺序‌:程序计数器用于控制指令的执行顺序。它指示计算机在其指令序列中的位置,确保指令按顺序执行。
  • ‌存储下一条指令的地址‌:程序计数器存储下一条指令的地址,确保‌CPU能够正确地获取和执行下一条指令。
  • ‌在中断时保存当前指令‌:当发生中断时,程序计数器会保存当前正在执行的指令的地址,以便在中断处理完毕后能够恢复到中断前的状态,继续执行程序。
  • 程序计数器的工作原理:
  • 程序计数器在每个指令执行完毕后会自动增加,指向下一条指令的地址。如果发生跳转或分支,程序计数器的值会由转移指针给出新的指令地址。程序计数器确保CPU能够连续地执行指令,实现程序的顺利运行。

总结Java内存:

(引进)驱动

程序的运行离不开硬件,硬件的运行离不开驱动。

三、引用传递和值传递

传递有引用传递(e.g句柄的地址的传递)和值传递(e.g对象地址的传递)

值传递:Java,C,C++

  • ‌引用传递(Pass by Reference)‌是指在调用函数时将实际参数的地址传递到函数中,这样在函数中对参数所进行的修改,将影响到实际参数。这意味着多个变量可以通过引用传递共享同一个内存地址。‌
  • ‌值传递(Pass by Value)‌是指在调用函数时将实际参数的值复制一份传递给函数,这样当函数对形参进行修改时,不会影响到实际参数。每个变量都有自己的内存地址,互不影响。

引用传递和值传递的具体应用场景:

  • 引用传递适用于需要修改传入参数的情况,例如在需要返回多个结果或者需要对传入参数进行修改时。值传递适用于不需要修改传入参数的情况,例如在只需要读取数据时。

引用传递和值传递的优缺点:

  • 引用传递的优点是可以直接修改传入参数,减少数据复制的开销。缺点是需要注意避免对传入参数的意外修改。值传递的优点是传入参数不会被修改,安全性高。缺点是需要复制数据,可能会增加开销

 

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

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

相关文章

论文阅读-用于点云分析的自组织网络

目前存在的问题: 原始的SOM(1)训练结果与初始节点高度相关(2)样本更新规则取决于输入点的顺序3D 卷积神经网络(需要将数据转换为体素,存在分辨率损失和计算成本上涨的问题)、PointN…

数据结构之二叉树前序,中序,后序习题分析(递归图)

1.比较相同的树 二叉树不能轻易用断言,因为树一定有空 2.找结点值 3.单值二叉树 4.对称二叉树 5.前序遍历

【JavaScript】JavaScript开篇基础(4)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

运动控制 直流有刷电机

文章目录 一、简介二、组成三、特点四、电机参数4.1 额定电压4.2 额定电流4.3 额定转速4.4 额定扭矩4.5 减速比 五、工作原理5.1 左手定则5.2 工作原理 六、测速原理6.1 磁电式编码器6.2 光电式编码器 一、简介 直流有刷电机是一种内含电刷装置能将直流电转换为机械能的电机&a…

关于模拟方法建模的一份介绍

有些时候,我们无法直接收集大量数据,即对于对象的行为直接观测或重复实验可能是不行的,所以此时就需要通过模拟的技术来收集数据,然后建模。这样的一种策略就是模拟方法建模,而模拟方法建模中最常用的一种方法就是蒙特…

Java 入门

目录 Java简介 Java JDK开发环境配置 第一个Java程序 Java标识符与关键字 Java注释 Java常量 Java变量的定义和使用 Java简介 Java简介: Java是由Sun Microsystems公司于1995年推出的一门面向对象的高级程序设计语言,可以运行于多个平台,其…

CSS--两列网页布局,三列布局和多行多列布局

两列网页布局 两列网页布局实验 先将一个未运用浮动效果的网页结构写出来 <style>header{/* 给页眉设置宽高和样式 */width:1000px;height: 40px;background-color: gray;border: 3px brown solid;margin-bottom: 5px;}article{width:1000px;height: 600px;background-c…

开源与商业的碰撞TPFLOW与Gadmin低代码的商业合作

随着数字化转型的浪潮席卷全球&#xff0c;企业对于高效、灵活的软件开发需求愈发迫切。低代码开发平台应运而生&#xff0c;为企业提供了简化开发流程、缩短开发周期的解决方案。在众多低代码开发平台中&#xff0c;Gadmin企业级低代码平台、TPFLOW工作流和SFDP超级表单脱颖而…

Edge浏览器提示“无法安全下载”

Edge浏览器在下载某些文件时&#xff0c;会提示“无法安全下载”。 注意事项&#xff1a;如果确实需要下载该文件&#xff0c;首先核对网址&#xff0c;确保下载文件的安全性&#xff0c;并在下载完成后进行必要的病毒查杀。 解决方法&#xff1a; 点击右侧的3个点&#xff0…

微服务系列三:微服务核心——网关路由

目录 前言 一、登录存在的问题归纳 二、*微服务网关整体方案 三、认识微服务网关 四、网关鉴权实现 五、OpenFeign微服务间用户标识信息传递实现 六、微服务网关知识追问巩固 前言 本篇文章具体讲解微服务中网关的实现逻辑、用于解决什么样的问题。其中标题中标注* 涉…

Docker入门系列——网络

Docker 通过容器化应用程序&#xff0c;彻底改变了我们构建、分发和运行应用程序的方式。然而&#xff0c;有效使用 Docker 的一个关键方面是理解容器如何相互通信以及与外界通信。 1. 什么是 Docker 网络&#xff1f; Docker 网络允许容器相互通信以及与外部资源通信。默认情况…

2024年大厂AI大模型面试题精选与答案解析

前言 随着AI市场&#xff0c;人工智能的爆火&#xff0c;在接下来的金九银十招聘高峰期&#xff0c;各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战&#xff0c;为求职市场注入了新的活力。 为了助力求职者在面试中展现最佳状态&#xff0c;深入理解行业巨头的选拔标…

Nico,从零开始干掉Appium,移动端自动化测试框架实现

开头先让我碎碎念一波~去年差不多时间发布了一篇《 UiAutomator Nico&#xff0c;一个基于纯 adb 命令实现的安卓自动化测试框》&#xff08;https://testerhome.com/topics/37042&#xff09;&#xff0c; 由于种种原因 (详见此篇帖子) 当时选择了用纯 adb 命令来实现安卓自动…

RTP和RTCP的详细介绍及其C代码示例

RTP和RTCP的详细介绍及其C代码示例 RTP和RTCP简介RTP协议详解RTCP协议详解RTP和RTCP之间的关系C代码示例RTP和RTCP简介 RTP(Real-time Transport Protocol,实时传输协议)和RTCP(Real-time Transport Control Protocol,实时传输控制协议)是流媒体传输中常用的两个协议。R…

国内能用的Docker镜像源【2024最新持续更新】

国内能用的Docker镜像源【2024最新持续更新】 Docker 镜像加速列表&#xff08;2024年11月已更新&#xff09;配置方式1&#xff1a;临时使用配置方式2&#xff1a;长久有效 在国内使用 Docker 的朋友们&#xff0c;可能都遇到过配置镜像源来加速镜像拉取的操作。然而&#xff…

队列(Queue)的介绍与实现

文章目录 队列队列的概念及结构 队列的实现初始化队列销毁队列队尾入队列队头出队列获取队列头部元素检测队列是否为空获取队列中有效元素个数 队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。队列遵…

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…

[sa-token]StpUtil.getLoginId

闲聊 一般情况下&#xff0c;我们想用uid&#xff0c;可能需要前端将uid传过来&#xff0c;或者将token传来&#xff0c;然后我们进行识别。 用了sa-token之后&#xff0c;可以使用StpUtil.getLoginId()方法获取当前会话的用户id 代码展示 例如以下代码&#xff1a; public Res…

算法实现 - 快速排序(Quick Sort) - 理解版

文章目录 算法介绍算法分析核心思想三个版本运行过程挖坑法Hoare 原版前后指针法 算法稳定性和复杂度稳定性时间复杂度平均情况O(nlogn)最差情况O( n 2 n^2 n2) 空间复杂度 算法介绍 快速排序是一种高效的排序算法&#xff0c;由英国计算机科学家C. A. R. Hoare在1960年提出&a…

算法【Java】—— 动态规划之斐波那契数列模型

动态规划 动态规划的思路一共有五个步骤&#xff1a; 状态表示&#xff1a;由经验和题目要求得出&#xff0c;这个确实有点抽象&#xff0c;下面的题目会带大家慢慢感受状态标识状态转移方程初始化&#xff1a;避免越界访问 dp 表&#xff0c;所以在进行填表之前我们要预先填…