Java数据保存与内存分配_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java数据保存与内存分配

Java数据保存与内存分配

 2014/4/7 21:51:22  xuanzhangyang  程序员俱乐部  我要评论(0)
  • 摘要:在叙述以下问题时先解释一下java中的堆与栈:栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢
  • 标签:Java 数据 内存分配 内存

?????? 在叙述以下问题时先解释一下java中的堆与栈:

?????? 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

? ? ?? 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要 在运行时动态分配内存,存取速度较慢。

?????? 一般情况下,可以保存数据的地方有6个:寄存器、栈、堆、静态存储、常数存储和非RAM存储。其中,寄存器是保存数据最快的地方,但是它的数量有限且程序不能直接控制。栈、堆和静态存储都在于RAM中。其中栈保存数据的速度仅次于寄存器,一些基本类型变量和对象的引用变量数据可以保存在栈中,堆中保存的数据灵活性会更大一些,可以用来保存Java对象。被static修饰的数据可以保存在静态存储区域。常数存储,就是用来存储常数的。下面看一下一维数组和二维数组的内存是如何分配的:

??????? 一维数组:

???????? int [] a; 当声明这个一维数组时,就会在栈中产生一个与该数组名相同的引用变量a,由于只是数组的声明,并未产生一个实际的数组,所以堆中不有保存任何信息。声明一个数组后,就要使用new创建这个数组,a=new int[5];这时堆中就会分配一块内存给数组,此时,栈中的a中存放的就是堆中这块内存的首地址,

创建完后,就可以用for循环为数组赋值了。

??????? 二维数组:

??????? int[][] a;声明时与一维数组类似,创建这个二维数组:a=new int[3][];这种创建数组的方式未确定第2维的大小,此时堆栈分配情况如下图:

????? 再指明第二维数:

class="java" name="code">a[0] = new int[1];
a[1] = new int[2];
a[2] = new int[3];

?此时,数组的内存分配如图:

?最后再给这个不规则数组赋值,也就是改变堆中分配的内存中那些0的值。

?

??????? 这就是数组的创建和初始化的过程中,java内存分配的过程。当在使用中没有任何的引用变量去指向数组时,该数组就会被JVM当成垃圾自动回收了。

?


?

  • 大小: 11.3 KB
  • 大小: 8.9 KB
  • 查看图片附件
上一篇: [NIO.2] 第二十七篇 新建、读取和写出文件 下一篇: 没有下一篇了!
发表评论
用户名: 匿名