[java小笔记] 关于数组内存管理的理解
数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性。在使用数组之前必须对数组对象进行初始化,当所有的数组元素都被分配了合适的内存空间,并指定了初始值是,数组初始化完成。
数组初始化分为
1、静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组的长度。
语法形式:
int[] y = {1,2,3,4,5};
2、动态初始化:初始化时程序员只指定数组的长度,由系统为程序分配初始值。
语法形式:
int[] x = new int[5];
下面看一下静态初始化数组和动态初始化数组在内存中的分布情况
//代码
public static void main(String[] args) { //采用静态初始化方式初始化第一个数组
String[] jops = new String[]{"工人","农民","官员","歌手"};
//采用静态初始化方式初始化第二个数组
String[] names = new String[]{"小张","小明","小刚"};
//采用动态初始化方式初始化第一个数组
String[] str = new String[5];
System.out.println("第一个数组的长度:"+jops.length);
System.out.println("第二个数组的长度:"+names.length);
System.out.println("第三个数组的长度:"+str.length);
}
三个数组的长度依次是4,3,5。
下面是内存原理图:

java数组是动态的,一旦数组初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而无法改变数组的长度。java的数组变量时一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数据数组对象。通过以下代码我们可以看出数组对象在内存的中变化关系。
jops = names;
str = names;
System.out.println("第一个数组的长度:"+jops.length);
System.out.println("第三个数组的长度:"+str.length);
jops[1] ="小李";
System.out.println("names数组的第二个元素:"+jops[1]);
堆内存的内存变化:

由此我们可以看出,java数组变量只是引用类型的变量,它并不是数组对象本身,只要让数组变量始终指向有效的数组对象,程序中即可使用该数组变量。
[java小笔记] 关于数组内存管理的理解的更多相关文章
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
- effective OC2.0 52阅读笔记(五 内存管理)
第五章:内存管理 29 理解引用计数 30 以ARC简化引用计数 总结:ARC通过命名约定将内存管理规则标准化.其他编程语言很少像OC这样强调命名.ARC通过设置全局数据结构(此数据结构的具体内容因处 ...
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的A ...
- 《深入分析Java Web技术内幕》读书笔记之JVM内存管理
今天看JVM的过程中收获颇丰,但一想到这些学习心得将来可能被遗忘,便一阵恐慌,自觉得以后要开始坚持做读书笔记了. 操作系统层面的内存管理 物理内存是一切内存管理的基础,Java中使用的内存和应用程序的 ...
- JVM学习笔记一:内存管理
参考资料 本文参考:<深入理解Java虚拟机>作者 周志明 知识产权归作者所有 走近java java组成部分:java语言.各平台虚拟机.Class文件结构.java api 类库.第三 ...
- 【cocos2d-x 3.x 学习笔记】对象内存管理
内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...
- JVM笔记2-Java虚拟机内存管理简介
java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区: 1.运行时常量池,已经被虚拟机加载的类信息(1.类的版本信息,2.字段,3.方法, ...
- java Vamei快速教程22 内存管理和垃圾回收
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. ...
- Android笔记--Bitmap(二)内存管理
Bitmap(二) 内存管理 1.使用内存缓存保证流畅性 这种使用方式在ListView等这种滚动条的展示方式中使用最为广泛, 使用内存缓存 内存缓存位图可以提供最快的展示.但代价就是占用一定的内存空 ...
随机推荐
- PHP常用的基本文件和目录操作总结
来源:http://www.ido321.com/835.html 一.基本文件的操作 文件的基本操作有:文件判断.目录判断.文件大小.读写性判断.存在性判断及文件时间等 1: <?php 2: ...
- 设计一个简单的,低耗的能够区分红酒和白酒的感知器(sensor)
学习using weka in your javacode 主要学习两个部分的代码:1.过滤数据集 2 使用J48决策树进行分类.下面的例子没有对数据集进行分割,完全使用训练集作为测试集,所以不符合数 ...
- leetcode@ [62/63] Unique Paths II
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleG ...
- HDU-4607 Park Visit bfs | DP | dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...
- adb pull命令复制android数据库文件.db到电脑
1.win+r cmd进入命令行 2.cd 进入[sdk]/platform-tools目录下 3.执行下面命令行,复制xxx.db到F:/dest adb pull /data/data/[pack ...
- Java之文件的随机访问和读写RandomAccessFile
package FileDemo; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAc ...
- 教程-Delphi各版本与工具下载地址
1.Delphi 7.0 下载地址:http://www.skycn.com/soft/2121.html 注册码:(正在用的没有问题)V8S3-KM82KQ-XN8JQK-EPS33EA-GZK汉化 ...
- 高效使用Bitmaps(一) 大Bitmap的加载
转载:http://my.oschina.net/rengwuxian/blog/182885 高效使用Bitmaps有什么好处? 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化 ...
- iOS 键盘框架IQKeyboardManager使用
框架地址:https://github.com/hackiftekhar/IQKeyboardManager AppDelegate.m文件中 #import <IQKeyboardMana ...
- .NET常用工具类集锦
不错的地址: http://www.cnblogs.com/flashbar/archive/2013/01/23/helper.html https://github.com/chrisyanghu ...