Java内存分配介绍

2023-11-15

Java内存分配为: 栈,堆,方法区,本地方法栈和寄存器

字节码文件加载时进入的内存方法区,方法运行区域为栈,变量也是存储在栈中,new出来的东西会在堆内存中开辟空间并产生地址。

public class ArrayDemo {
    public static void main(String[] args) {
        int a = 10;
        int[] arr = new int[]{11,22,33};
        
        arr[0] = 44;
        arr[1] = 55;
        arr[2] = 66;

        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

数组内存图,字节码文件将类加载时进入的内存是方法区,在方法区中再调用方法进入栈内存,变量在栈内存中存储,创建数组的话,他会现在栈中开辟内存区域,之后因为要new一个数组对象,因此要进入堆内存开辟空间这个时候再将要存的值存入数组中,然后再将这个空间的地址值传入到刚刚数组在栈内存开辟的空间内,这样一个数组的创建就创建好了。

方法的调用流程:方法没有被调用的时候,在方法区中的字节码文件中存放,方法被调用的时候,需要进入到栈内存中运行。

public class FucDemo {
    public static void main(){
        study();
    }

    private static void study() {
        eat();
        System.out.println("学习");
        sleep();
    }

    private static void sleep() {
        System.out.println("睡觉");
    }

    private static void eat() {
        System.out.println("吃饭");
    }
}

这个程序的方法流程:先将字节码 FucDemo.class字节码文件加载进方法区内,此时方法区内有 main study sleep eat, 程序开始运行,将main方法加载进栈内存,main会去调用study(),study方法去找eat()方法 ,eat方法执行后出栈,此时study()方法内再执行输出文字学习,再去调sleep()方法,此时study方法又需要暂停,sleep执行完输出睡觉之后出栈,此时study也调用完了,study也出栈,然后main方法也调用完毕,最后也出栈。

public class CanShuDemo {
    public static void main(String[] args) {
        int a = 10;
        change(a);
        System.out.println(a);
    }

    private static void change(int a) {
        System.out.println(a);
        a = 20;
        System.out.println(a);
    }

基本类型的参数传递:比如a变量 实际上他是复制了10的值传入change方法可以看成change(10),然后把10传递给change方法里面的形参变量a,改变a的值只是改变了change方法中形参的值而不是实参的值

引用类型的参数传递:传递地址值到形参

public class MethodDemo2 {
    public static void main(String[] args) {
        int[] arrs = {10,20,30};
        change(arrs);
        System.out.println(arrs[1]);
    }

    private static void change(int[] arrs) {
        System.out.println("方法内部2:" + arrs[1]); //20
        arrs[1] = 222;
        System.out.println("方法内部2: " + arrs[1]); //222
    }

}

 change方法会通过你传递的地址值,通过你传递的地址值找到你堆内存中的数组,再将你数组中的值给修改。这也是跟基本数据类型值传递不同的地方。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java内存分配介绍 的相关文章

  • 将字符串转换为整数数组 String at = "1 2 3 4 5" 转换为 ar=[1,2,3,4,5]

    我正在读取一个字符串 作为一整行数字 用空格分隔 即1 2 3 4 5 我想将它们转换为整数数组 以便我可以操作它们 但这段代码不起作用 它说不兼容的类型 String str br readLine int array new int 4
  • XSD 验证错误:在 web.xml 中找不到 TagLib 标记

    我详细显示错误如下 cvc complex type 2 4 a 发现以元素开头的无效内容 taglib One of http java sun com xml ns javaee 描述 http java sun com xml ns
  • 从 J2SE 5.0 学习 Java SE 6 有多难?

    我是新来的 我有一个简单的问题 希望有人能帮助我 我即将开始学习Java 正在寻找一本好的教材来使用 我发现 Y Daniel Liang 的 Java 编程入门 评价很高 但我想知道是否可以使用旧的第 6 版 2006 年 7 月 22
  • 如何正确地将MapStruct与Eclipse集成? (包括Lombok java代理)

    我愿意在一些官方项目中使用MapStruct 所以我决定先对其进行一些测试 我需要让它与 eclipse 集成工作 并遵循 MapStruct 网站上提供的所有说明 但是 到目前为止还没有运气 有人成功实现了这种整合吗 如果是的话我可以缺少
  • 如何实现 Eclipse 清理和构建(又名重建)?

    我删除了我的 binEclipse Indigo 中的文件夹 与 Helios 非常相似 现在我想知道如何重建我的 Java 项目 我只是找不到像 Netbeans 中那样的按钮 对于 Eclipse 您可以在下面找到重建选项项目 gt 清
  • 从插件设置 Maven 属性

    我在这里阅读了一些关于如何从 Maven 插件设置属性的问题 其中大多数讨论了应用程序的版本号 似乎没有简单的方法可以做到这一点 我发现的最佳解决方案是拥有一个从插件更新的 filter properties 文件 并由主 pom 文件使用
  • Jackson反序列化SNS消息错误MismatchedInputException

    我正在编写一个通过 SNS HTTP 请求处理来自 Amazon Simple Email Service 的回调的功能 我想将亚马逊提供的消息解析为本地对象结构 问题是 SNS 将 JSON 消息包装成字符串 并且 Jackson 无法解
  • 匿名类*总是*维护对其封闭实例的引用吗?

    我正在处理一些代码 其中一个对象 foo 正在创建另一个对象 对象 bar 并将其传递给Callable 之后 foo 将返回 bar 然后我希望 foo 变得无法访问 即 可用于 垃圾收集 我最初的想法是创建Callable匿名 例如 c
  • java.io.IOException: EnsureRemaining: 仅剩余 0 个字节,尝试读取 1

    我在 giraph 中的自定义类方面遇到一些问题 我制作了 VertexInput 和 Output 格式 但总是收到以下错误 java io IOException ensureRemaining Only bytes remaining
  • Junit测试中LocalDateTime反序列化的问题

    我有问题LocalDateTime反序列化Junit测试 我有简单的REST API返回一些DTO目的 当我呼叫端点时 响应没有问题 它是正确的 然后我尝试编写单元测试 得到MvcResult并使用ObjectMapper将其转换为我的DT
  • Java生成范围内不重复的随机数

    我想生成 1 到 4 范围内的随机数 包括 4 这是我的代码 int num r nextInt 4 1 r is instance of Random 但是 我在循环中运行上述代码 并且不想重复随机数 现在发生的事情我经常得到 1 1 1
  • 将 Java 3D 坐标转换为 2D 屏幕坐标

    我正在使用一个名为 Walrus 的 Java 3D 应用程序 该应用程序用于显示有向图 该代码已经具有突出显示节点并在给定其屏幕坐标的情况下在图形中相邻绘制标签的功能 旋转屏幕后 该节点不再突出显示 我所拥有的是 3D 中的节点坐标 我需
  • 堆内存与对象内存

    根据一篇关于Java内存和特性的论文 内存分数分为两种类型 堆内存 即应用程序在运行时消耗的内存 对象内存 即程序中使用的各种对象分配的内存 例如整数和字符串等 他们的意思是stack当他们说时的记忆object记忆 或者它们是什么意思 很
  • 使用 Oracle Wallet 身份验证从 Spring-jdbc 连接到 Oracle DB

    我将 Spring jdbc 与 org apache commons dbcp BasicDataSource 结合使用 使用用户名和密码进行连接 我想使用BasicDataSource 因为我只有一个连接 我有这个代码
  • 字节流和字符流

    请解释一下什么是字节流和字符流 这些究竟意味着什么 Microsoft Word 文档是面向字节的还是面向字符的 Thanks 流是一种顺序访问文件的方式 字节流逐字节访问文件 字节流适用于任何类型的文件 但不太适合文本文件 例如 如果文件
  • 使用 java 中的准备好的语句插入自定义 SQL 类型

    我有一些自定义类型 它们基本上都是枚举 以下是它们的外观示例 CREATE TYPE card suit AS ENUM spades clubs hearts diamonds 我在 Java 中有一些准备好的语句 看起来像这样 Setu
  • 在 Struts 2 中使用单个文件标签上传多个文件

    我想使用单个 Struts 2 文件标签上传多个文件 就像在 Gmail 中一样 我们使用 CTRL 键来选择多个文件来附加多个文件 我知道如何上传多个文件 但我想使用单个文件标签 我在一个小画廊应用程序中上传多个文件 如果您的操作已设置为
  • 如何使用JSqlParser向sql添加where条件?

    我想用JSqlParser向sql添加where条件 例如 Before select from test table where a 1 group by c After select from test table where a 1
  • 正确的单元测试技术

    在使用 TDD 时 我发现自己需要测试一个包含查找值的常量 最终 哈希图 请查看更新中出现这种情况的原因 见下文 private static final Map
  • java 更新进度条

    我有一个 JFrame 和以下组件 JButton jButton1 Progress Bar ProgressBar 及其公共静态 JLabel 状态及其公共静态 单击按钮时会执行不同的语句 我想在每个语句后更新我的进度条 这是我的代码

随机推荐

  • 使用java实现word转pdf,亲测有效,完美保留样式

    网上了很多方法 要么转换速度慢 要么转换出来的格式不一样 遇到了各种问题 无法完美完成转换 在stackoverflow发现完美答案 依赖
  • 网易严选滑块

    疫情分控在家 哎 难搞哦 大表哥们 虽然是网易一家的滑块 就当无聊分享一下 说明一下 有些id用官方的那套可能过不去 文章末尾分享一个ast解混淆的js 大家可以拿去用过用 之前的文章有写过网易的 也是简单介绍了一下 严选滑块 先看看b d
  • webpack系列 —— 性能优化篇

    一 压缩图片和css 压缩图片 image webpack loader 来压缩图片文件 image webpack loader 使用 imagemin 来进行压缩 use file loader 需要在file loader之后添加 i
  • Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

    SDIO Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块 内置无线网络协议IEEE802 11协议栈以及TCP IP协议栈 能够实现用户主平台数据通过SDIO口到无线网络之间的转换 SDIO具有传输数据快 兼容SD M
  • Jupyter Notebook 更改默认存储路径、更改默认浏览器、添加虚拟环境的kernel

    文章目录 1 更改默认存储路径 1 1 修改配置文件 1 2 修改快捷方式 2 更改默认浏览器 3 添加虚拟环境的kernel 1 更改默认存储路径 1 1 修改配置文件 Jupyter Notebook 的默认存储路径是 C Users
  • 计算机二级12月报名时间广东,18年广东省全国计算机等级考试报名:12月15日起...

    全国计算机等级考试 National Computer Rank Examination 简称NCRE 是由教育部考试中心主办 面向社会 用于考查应试人员计算机应用知识和能力的全国性计算机水平考试体系 一 考试时间及考试体系 一 考试时间
  • 【C语言】自动售货机

    题目 假设一种自动售货机可以为顾客提供 3 种价格档次的不同饮料 投入2元钱 可选择康师傅矿泉水 怡宝矿泉水和农夫山泉之一 投入 3 元钱 可选择可乐 雪碧和果汁之一 投入 5 元钱 可选择奶茶 咖啡和酸奶之一 编写程序 模拟用户向自动售货
  • hcl在服务器上保存文件,HCL File Extension - What is .hcl and how to open? - ReviverSoft

    You re here because you have a file that has a file extension ending in hcl Files with the file extension hcl can only b
  • @Mapper注解中如何使用Mybatis的<if>标签

    以 Update为例子
  • 图像分类、目标检测、图像分割区别

    1 图像分类 图像分类主要是基于图像的内容对图像进行标记 通常会有一组固定的标签 而你的模型必须预测出最适合图像的标签 这个问题对于机器来说相当困难的 因为它看到的只是图像中的一组数字流 上图片来自于Google Images 而且 世界各
  • jquery的$().each,$.each的区别

    在jquery中 遍历对象和数组 经常会用到 each和 each 两个方法 两个方法是有区别的 从而这两个方法在针对不同的操作上 显示了各自的特点 each 对于这个方法 在dom处理上面用的较多 如果页面有多个input标签类型为che
  • 图机器学习课程笔记6

    维生素C吃多了会上火 个人CSDN博文目录 cs224w 图机器学习 2021冬季课程学习笔记集合 目录 1 思维大纲 2 中文笔记 1 思维大纲 2 中文笔记
  • 面试经典(19)--求二叉树中节点的最大距离

    题目描述 写一个程序求二叉树中相距最远的两个节点之间的距离 图3 11 A和B即为所求距离最远的两个节点 我们先作图 看能否找到规律 我们可以看到 所求的两个节点可能经过二叉树的根结点 也可能不经过二叉树的根结点 每个节点维护左右子树最大距
  • 【笔记】C++库函数——bitset

    笔记 C 库函数 bitset 看到有大佬掏出这个库函数 一愣 这绝对是未曾想象过的道路 长见识 有时候做题总能碰见稀奇古怪的库函数 每个都令我大开眼界 以后看到感兴趣的都会记录一下 感觉是个好东西 算是学习道路上的小小积累吧 抓紧记录一下
  • VSCode相对路径问题

    习惯了anaconda等环境写程序的同学 在使用VSCode时 遇到的一个问题就是相对路径问题 在anaconda中 相对路径是针对当前的文件的相对路径 在VSCode中 相对路径是针对当前项目文件夹的 如果需要将VSCode内的相对路径设
  • 对不起,其实我是.......

    大家好 最近在后台收到有同学问我 你是哪个学校的 又或者问我你今年大几了 其实 我想这些答案在大家心里面应该早已经有了答案 不过 今天说的不是这些 而是 没错 今天我来给大家推荐一款 马克思原理复习必背的小程序 由我们学校 校级组织 清泽心
  • Linux Top 命令指南

    top 命令允许用户监视 Linux 上的进程和系统资源使用情况 它是系统管理员工具箱中最有用的工具之一 并且在每个发行版中都预装了它 与 ps 等其他命令不同 它是交互式的 我们可以浏览进程列表 终止进程 等等 本文中 我们将了解如何使用
  • 倾斜摄影三维模型五种常见格式

    在倾斜摄影三维数据中 OSGB数据居多 航拍的影像经过建模软件处理产出之时 有很多成果的数据需要我们去选择输出 对于不同的项目需求 我们需要选择合适的输出数据格式 他们之间有什么区别 分别是应用在哪些个领域 今天分别以OSGB OBJ FB
  • ipsec.conf(5) - Linux man pag 中文翻译

    ipsec conf 5 Linux man page 英文网址 https linux die net man 5 ipsec conf 未经许可 禁止转载 请知悉 Name 名称 ipsec conf IPsec配置和连接 Descri
  • Java内存分配介绍

    Java内存分配为 栈 堆 方法区 本地方法栈和寄存器 字节码文件加载时进入的内存方法区 方法运行区域为栈 变量也是存储在栈中 new出来的东西会在堆内存中开辟空间并产生地址 public class ArrayDemo public st