【Java探索之旅】数组使用 初探JVM内存布局

news2024/11/28 12:37:17
个人头像
🎥 屿小夏 : 个人主页
🔥个人专栏 : Java编程秘籍
🌄 莫道桑榆晚,为霞尚满天!

文章目录

  • 📑前言
  • 一、数组的使用
    • 1.1 元素访问
    • 1.2 数组遍历
  • 二、JVM的内存布局
  • 🌤️全篇总结

📑前言

使用数组,包括元素访问和数组遍历,是编程学习的基础之一。同时,理解JVM的内存布局对于初学者来说也是至关重要的,特别是对堆和虚拟机栈这两块空间的认识,有助于更好地理解程序运行时的内存管理和数据存储。

一、数组的使用

1.1 元素访问

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
// 也可以通过[]对数组中的元素进行修改
array[0] = 100;
System.out.println(array[0]);

注意事项

  1. 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素
  2. 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。
int[] array = {1, 2, 3};
System.out.println(array[3]); // 数组中只有3个元素,下标一次为:0 1 2,array[3]下标越界
// 执行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
        at Test.main(Test.java:4)

抛出了 java.lang.ArrayIndexOutOfBoundsException 异常. 使用数组一定要下标谨防越界.

1.2 数组遍历

“遍历” 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作,比如:打印。

在数组中可以通过 数组对象.length 的方式来获取数组的长度。

int[] array = new int[] {1,2,3,4,5,6};
//for循环遍历
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i]+" ");
}
System.out.println();

// for-each遍历
for (int x : array) {
    System.out.print(x+" ");
}
System.out.println();

//数组转字符串,将其打印
String string = Arrays.toString(array);
System.out.println(string);

for-each(依次取array的元素,然后自增) 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错。

二、JVM的内存布局

内存是一段连续的存储空间,主要用来存储程序运行时数据的。比如:

  1. 程序运行时代码需要加载到内存
  2. 程序运行产生的中间数据要存放在内存
  3. 程序中的常量也要保存
  4. 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁

如果对内存中存储的数据不加区分的随意存储,那对内存管理起来将会非常麻烦

如下图:

在这里插入图片描述

内存可以想象是你的房间,如果房间里面的东西都是杂乱无章的乱放,等你需要找一件物品的时候,就需要翻遍整个房间。

因此JVM也对所使用的内存按照功能的不同进行了划分:

在这里插入图片描述

  • 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址
  • 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
  • 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的
  • 堆(Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2,3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销毁。
  • 方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据. 方法编译出的的字节码就是保存在这个区域

对于前期的初学者来说不需要关注上述所有,理解堆和虚拟机栈这两块空间就够了。

🌤️全篇总结

数组作为编程中常用的数据结构,具有重要的作用和灵活性,通过掌握数组的使用方法,我们可以高效地处理大量数据。元素访问和数组遍历是数组操作中常见的技巧,能够帮助我们更好地利用数组的功能。此外,了解JVM的内存布局,特别是堆和虚拟机栈的作用,对于理解程序运行时的内存管理至关重要。

在这里插入图片描述

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

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

相关文章

聚道云软件连接器助力企业实现滴滴出差报销自动化

一、客户介绍 某机械有限公司是一家在机械设备制造领域拥有深厚底蕴和卓越实力的企业。自公司成立以来&#xff0c;该公司始终秉承创新、务实、高效的发展理念&#xff0c;专注于机械设备的研发、生产和销售。经过多年的发展&#xff0c;公司已成为国内机械行业的佼佼者&#…

PyQt介绍——弹框介绍和使用

PyQt介绍——弹框介绍和使用 一、QMessageBox QMessageBox是一种通用的弹出式对话框&#xff0c;用于显示消息&#xff0c;允许用户通过单击不同的标准按钮对消息进行反馈 QMessageBox类提供了许多常用的弹出式对话框&#xff0c;如提示、警告、错误、询问、关于等对话框。这…

软考证书有用吗?软考证书的含金量大吗?

一、以考代评 通过考试并获得相应级别计算机专业技术资格&#xff08;水平&#xff09;证书的人员&#xff0c;表明其已具备从事相应专业岗位工作的水平和能力&#xff0c;用人单位可根据《工程技术人员职务试行条例》有关规定和工作需要&#xff0c;从获得计算机专业技术资格…

诺奖得主与巨资“铸剑”:两年内,Pasqal冲刺量子计算的商业化大关

PASQAL的量子计算机 几年前&#xff0c;中性原子技术似乎是最不可能取得突破的领域。因为它们没有电荷&#xff0c;这使得控制它们显得尤为困难。然而&#xff0c;随着哈佛大学和麻省理工学院的最新研究进展&#xff0c;以及像QuEra这样的私营初创公司的努力&#xff0c;中性原…

修改百度百科的词条的方法

百度百科作为国内最大的百科全书网站之一&#xff0c;是广大网民获取各类知识的重要途径之一。所以&#xff0c;如何修改百度百科的词条成为了很多人关心的话题。本文将介绍修改百度百科的方法&#xff0c;并提供一些技巧和注意事项。 注册百度账号 首先&#xff0c;进入百度百…

2024/4/6—力扣—简化路径

代码实现&#xff1a; // 分割/得到名字 char **split(const char *s, int *returnSize) {int n strlen(s);char **ans (char **)malloc(sizeof(char *) * n);int l 0, r 0, len 0;while (r < n) {while (r < n && s[r] /) {r;}l r;while (r < n &…

Flask前端页面文本框展示后端变量,路由函数内外两类

一、外&#xff01;路由函数外的前后端数据传输 Flask后端 ↓ 首先导入包&#xff0c;需要使用 后端&#xff1a;flask_socketio来进行路由外的数据传输&#xff0c; from flask_socketio import SocketIO, emit 前端&#xff1a;还有HTML头文件的设置。 <!DOCTYPE …

面试突击---MySQL索引

面试突击---MYSQL索引 面试表达技巧&#xff1a;1、谈一下你对于mysql索引的理解&#xff1f;&#xff08;为什么mysql要选择B树来存储索引&#xff09;2、索引有哪些分类&#xff1f;3、聚簇索引与非聚簇索引4、回表、索引覆盖、最左匹配原则、索引下推&#xff08;1&#xff…

实验案例二:配置路由器实现互通

一.实验环境 实验用具包括两台路由器&#xff08;或交换机)&#xff0e;一根双绞线缆&#xff0c;一台PC&#xff0c;一条Console线缆。 二.需求描述 如图6.14所示&#xff0c;将两台路由器的Gig0/0接口相连&#xff0c;通过一台PC连接设备的Console端口并配置IP地址&#x…

跟风Spring的context继承风格写的一个业务处理器,无聊

忽然记起spring的context的N重继承风格&#xff0c;一个抽象类实现一部份功能&#xff0c;想从那重改复写就从哪重开始。脑子一抽&#xff0c;也在业务代码里面玩了下。效果嘛。学得是有模有样&#xff0c;感觉就是越搞越复杂。有点过度设计了&#xff0c;折腾个啥呢。哈哈哈……

防止企业数据泄密的四种有效措施

防止企业数据泄密的四种有效措施 泄密大案每天都在上演&#xff0c;受害者既有几十人的小型企业&#xff0c;也有上万人的世界500强&#xff0c;为什么这些企业都难逃数据泄露的噩梦呢&#xff1f;我们应该采取什么措施来防止信息泄密呢&#xff1f; 首先我们来看看数据泄密的…

聚贤帮赵远峰:照亮希望 激励奋斗

在2023年河北涿州灾情爆发后,聚贤帮的一众学员深入困难群众中去,力所能及贡献自己的一份力量。其实早在2022年4月,聚贤帮的许多成员就曾多次踏入山区,开展慈善活动,用自己的力量为当地居民带来温暖和关爱。 “照亮希望,激励奋斗”成为了大家慈善活动的信仰。通过捐款和物资,聚…

swiper 插件 轮播图

html代码 <div class"text_box"><div class"swiper mySwiper"><div class"swiper-wrapper"><div class"swiper-slide"><imgsrc"https://cdn.pixabay.com/photo/2023/11/08/09/58/leaf-8374442_640.jp…

Linux --- 高级IO

目录 1. 什么是IO 2. 阻塞的本质 3. 五种IO模型 3.1. 通过故事认识五种IO模型 3.2. 上述故事的总结 3.3. 具体的五种IO模型 3.3.1. 阻塞IO 3.3.2. 非阻塞轮询式IO 3.3.3. 信号驱动IO 3.3.4. 多路转接IO 3.3.5. 异步IO 4. 非阻塞IO 4.1. fcntl 系统调用 1. 什么是I…

怎么清除3D模型杂质?---模大狮模型网

在进行3D建模过程中&#xff0c;模型可能会受到各种杂质的影响&#xff0c;这些杂质可能来自于模型本身的结构问题、导入导出过程中的错误、或者是不当的编辑操作所留下的痕迹。清除这些杂质是保证模型质量和渲染效果的关键步骤之一。本文将介绍几种常见的清除3D模型杂质的方法…

【Android】重温Activity生命周期

前言 Android中用得最多的组件是Activity&#xff0c;而它的生命周期也是最基础的知识&#xff0c;从刚接触Android到工作中会频繁依赖这部分知识。可能大多数人能说出页面新建到页面关闭会走的生命周期&#xff1a;onCreate、onStart、onResume、onPause、onStop、onDestory&…

计算机网络 Cisco路由器基本配置

一、实验内容 1、按照下表配置好PC机IP地址和路由器端口IP地址 2、配置好路由器特权密文密码“abcd&#xff0b;两位班内序号”和远程登录密码“star” 3、验证测试 a.验证各个接口的IP地址是否正确配置和开启 b.PC1 和 PC2 互ping c.验证PC1通过远程登陆到路由器上&#…

VMware安装Linux虚拟机(rocky9)

软件准备&#xff1a; VMware虚拟机ISO系统镜像文件 选择创建虚拟机→典型→下一步→点击稍后安装操作系统 选择Linux系统和对应版本 输入虚拟机名称和选择保存位置 设置磁盘大小 根据需要自定义硬件配置→完成 然后点击编辑虚拟机设置→CD/DVD→选择ISO镜像 然后开启虚拟机→…

Mysql的函数和约束

函数和约束 文章目录 函数和约束函数字符串函数数值函数日期函数流程函数 约束概念目的分类使用案例外键约束 函数 使用 select 函数();字符串函数 数值函数 日期函数 流程函数 约束 概念 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的 保证…