当前位置: 首页 > news >正文

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

个人头像
🎥 屿小夏 : 个人主页
🔥个人专栏 : 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: 100at 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的内存布局,特别是堆和虚拟机栈的作用,对于理解程序运行时的内存管理至关重要。

在这里插入图片描述

相关文章:

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

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局&#x1f324;️全篇总结 …...

RabbitMQ消息模型之Simple消息模型

simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…...

设计模式系列:简单工厂模式

作者持续关注 WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS二次开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 目录 定义 特点 使用场景 优缺点 (1) 优点…...

解决 windows+Ubuntu 时间不同步问题

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 如果你的电脑装了 Windows Ubuntu 系统&#xff0c;肯定会遇到时间不同步的问题。那么如何解决呢&#xff1f;参考步骤如下&#xff1a; # 步骤一&#xff1a;进入到 Ubuntu 系统# 步骤二&#xff1a;执行如下三条命令即可 sud…...

Learn SRP 01

学习链接&#xff1a;Custom Render Pipeline (catlikecoding.com) 使用Unity版本&#xff1a;Unity 2022.3.5f1 1.A new Render Pipeline 1.1Project Setup 创建一个默认的3D项目&#xff0c;项目打开后可以到默认的包管理器删掉所有不需要的包&#xff0c;我们只使用Unit…...

NL2SQL进阶系列(4):ConvAI、DIN-SQL、C3-浙大、DAIL-SQL-阿里等16个业界开源应用实践详解[Text2SQL]

NL2SQL进阶系列(4)&#xff1a;ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL] NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2SQL、Text2DSL] NL2SQL基础系列(2)&#xff1a…...

Python统计分析库之statsmodels使用详解

概要 Python statsmodels是一个强大的统计分析库,提供了丰富的统计模型和数据处理功能,可用于数据分析、预测建模等多个领域。本文将介绍statsmodels库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装statsmodels库非常简单,可以使用pip命令进行安装:…...

A Learning-Based Approach for IP Geolocation(2010年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Eriksson B, Barford P, Sommers J, et al. A learning-based approach for IP geolocation[C]//Passive …...

高创新 | [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测

高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测 目录 高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现 [24年新算…...

Web APP设计:将多个相近的机器学习模型融合到一个Web APP中

将多个相近的机器学习模型融合到一个Web APP中 FUSE-ML是一个用于预测腰椎融合术后效果的APP&#xff0c;它可以做出三个不同的结论&#xff0c;分别评价术后的腰痛、腿痛和日常功能是否提高。 这估计是部署了三个机器学习模型在这个APP中&#xff0c;因为一个机器学习模型仅…...

网络爬虫:定义、应用及法律道德考量

网络爬虫技术在当今数据驱动的世界中发挥着重要作用。本文将从网络爬虫的定义和主要功能&#xff0c;其在业界的应用实例&#xff0c;以及涉及的法律和道德问题三个方面进行深入探讨。 1. 爬虫的定义和主要功能 网络爬虫&#xff0c;也称为网页爬虫或蜘蛛&#xff0c;是一种…...

(三)ffmpeg 解码流程以及函数介绍

一、视频解码流程 二、函数介绍 1.avformat_network_init 函数作用&#xff1a; 执行网络库的全局初始化。这是可选的&#xff0c;不再推荐。 此函数仅用于解决旧GnuTLS或OpenSSL库的线程安全问题。如果libavformat链接到这些库的较新版本&#xff0c;或者不使用它们&#…...

go work模块与go mod包管理是的注意事项

如下图所示目录结构 cmd中是服务的包&#xff0c;显然auth,dbtables,pkg都是为cmd服务的。 首先需要需要将auth,dbtables,pkg定义到go.work中&#xff0c;如下&#xff1a; 在这样在各个单独的go mod管理的模块就可以互相调用了。一般情况下这些都是IDE自动进行的&#xff0c;…...

华为OD-C卷-最长子字符串的长度(一)[100分]

题目描述 给你一个字符串 s,首尾相连成一个环形,请你在环中找出 o 字符出现了偶数次最长子字符串的长度。 输入描述 输入是一个小写字母组成的字符串 输出描述 输出是一个整数 备注 1 ≤ s.length ≤ 500000s 只包含小写英文字母用例1 输入 alolobo输出 6说明 最长子字…...

实战小项目 | ESP32-S3和ESP32-C3通过ESP-Mesh-Lite组网 温湿度传感器案例

传统Wi-Fi网络所有终端设备都需要直接与路由器相连&#xff0c;这使得Wi-Fi的覆盖区域受到路由器位置的限制&#xff0c;可接入终端设备的数量也受到路由器容量的限制。而乐鑫ESP-Mesh-Lite Wi-Fi组网方案&#xff0c;所有终端设备都可以与相邻设备连接&#xff0c;摆脱了对路由…...

SiLM5350系列带米勒钳位的单通道隔离驱动器 助力汽车与工业应用实现稳定与高效的解决方案

带米勒钳位的隔离驱动SiLM5350系列 单通道 30V&#xff0c;10A 带米勒钳位的隔离驱动 具有驱动电流更大、传输延时更低、抗干扰能力更强、封装体积更小等优势, 为提高电源转换效率、安全性和可靠性提供理想之选。 SiLM5350系列产品描述&#xff1a; SiLM5350系列是单通道隔离驱…...

c#中怎么自动下载软件

以下是一个简单的 C# 示例&#xff0c;演示如何使用 WebClient 类下载软件&#xff1a; using System; using System.Net; class Program { static void Main(string[] args) { // 要下载的文件 URL string fileUrl "https://example.com/path/to/file"; // 本地保…...

Unity笔记之下拉刷新列表

这样的效果&#xff1b; 代码&#xff1a; using System; using System.Collections; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class ScrollRectUpdateView : Mon…...

防火墙操作!

当小编在Linux服务器上部署好程序以后&#xff0c;但是输入URL出现下述情况&#xff0c;原来是防火墙的原因&#xff01;&#xff01; 下面是一些防火墙操作&#xff01; 为保证系统安全&#xff0c;服务器的防火墙不建议关闭&#xff01;&#xff01; 但是&#xff0c;我们可…...

代码随想录算法训练营第四十一天| 343. 整数拆分,96.不同的二叉搜索树

题目与题解 343. 整数拆分 题目链接&#xff1a;343. 整数拆分 代码随想录题解&#xff1a;343. 整数拆分 视频讲解&#xff1a;动态规划&#xff0c;本题关键在于理解递推公式&#xff01;| LeetCode&#xff1a;343. 整数拆分_哔哩哔哩_bilibili 解题思路&#xff1a; 一眼懵…...

RVC 技术指南:从问题解决到效率提升

RVC 技术指南&#xff1a;从问题解决到效率提升 【免费下载链接】rvc RVC is a Linux console UI for vSphere, built on the RbVmomi bindings to the vSphere API. 项目地址: https://gitcode.com/gh_mirrors/rvc/rvc 问题场景→核心原理→分步方案→进阶技巧 一、环…...

告别手动Dockerfile!io.fabric8插件如何用Maven配置自动生成镜像(附Spring Boot实战)

告别手动Dockerfile&#xff01;io.fabric8插件如何用Maven配置自动生成镜像&#xff08;附Spring Boot实战&#xff09; 在Java生态中&#xff0c;容器化部署已成为现代应用交付的标准方式。传统做法要求开发者同时维护Dockerfile和构建脚本&#xff0c;这种割裂的配置方式不仅…...

嵌入式新手入门:用快马平台生成带详细注释的LED控制项目

作为一个嵌入式开发新手&#xff0c;刚开始接触STM32时确实有点懵。寄存器配置、时钟树、GPIO模式这些概念扑面而来&#xff0c;光看理论文档很容易失去方向。最近我发现用InsCode(快马)平台生成带详细注释的基础项目特别适合入门&#xff0c;今天就以最经典的LED流水灯为例&am…...

如何在macOS上实现高效Android USB网络共享:HoRNDIS完整指南

如何在macOS上实现高效Android USB网络共享&#xff1a;HoRNDIS完整指南 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS Android USB网络共享是许多开发者和技术爱好者经常需要的功能&#…...

2026年智能系统控制、优化与应用国际学术会议(ISCOA 2026)

【重要信息】 会议官网&#xff1a;https://www.yanfajia.com/action/p/2W49G66K 会议时间&#xff1a;2026年10月16-18日 会议地点&#xff1a;中国 成都 截稿日期&#xff1a;2026年6月1日&#xff08;早鸟优惠咨询&#xff09; 接收或拒收通知&#xff1a;文章投递后…...

League-Toolkit:基于LCU API的英雄联盟智能辅助工具

League-Toolkit&#xff1a;基于LCU API的英雄联盟智能辅助工具 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的MOBA游…...

单轴晶体中的偏振转换

摘要 当线偏振光聚焦并通过单轴晶体传播时&#xff0c;即使沿着光轴方向&#xff0c;不同的偏振分量之间也可能会发生复杂的转换。这种现象可以应用于例如产生涡旋光。以方解石晶体为例&#xff0c;这个用例在VirtualLab Fusion中证明了单轴晶体中的偏振转换。并且可以观察到…...

MinerU效果展示:精准识别表格数据,财务报告一键解析

MinerU效果展示&#xff1a;精准识别表格数据&#xff0c;财务报告一键解析 1. 引言&#xff1a;当AI遇见财务报表 想象一下&#xff0c;你是一名财务分析师&#xff0c;面前堆着几十份上市公司最新发布的PDF财报。你需要从中快速提取近三年的营收、利润、现金流等关键数据&a…...

DeepSeek-R1-Distill-Llama-8B部署全攻略:一条命令搞定推理模型

DeepSeek-R1-Distill-Llama-8B部署全攻略&#xff1a;一条命令搞定推理模型 1. 模型简介 1.1 什么是DeepSeek-R1系列&#xff1f; DeepSeek-R1是专为推理任务优化的语言模型系列&#xff0c;包含两个核心版本&#xff1a; DeepSeek-R1-Zero&#xff1a;完全通过强化学习训练…...

用 AI 生成视频?试试 Hailuo 视频生成 API!

在现代数字时代&#xff0c;视频内容的需求不断增长&#xff0c;而制作高质量视频的门槛也随之降低。今天&#xff0c;我想和大家分享一个强大的工具——Ace Data Cloud Hailuo 视频生成 API。这款 API 不仅支持文本转语音、多个声音切换和情感调整&#xff0c;还能为你提供清晰…...