黑马程序员技术交流社区

标题: 数组和其内存管理的问题! [打印本页]

作者: panningwjr    时间: 2013-8-5 17:04
标题: 数组和其内存管理的问题!
本帖最后由 杨兴庭 于 2013-8-6 21:30 编辑

对java内存管理了解的不是特别透彻,基本类型数组和引用类型数组在初始化时内存分配机制有什么区别?
查了不少工具书,还是不太明白,希望哪位能解释得透彻点,谢谢了!
作者: wang100753    时间: 2013-8-5 17:30
Java的内存分配上,主要分4个块!
一块是用来装代码的,就是编译的东西。
一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量。
一块是stack,也就是栈,是用来装变量和引用类型的!但区别在于,装了变量以后,变量上是有值的,而引用类型本身在stack上是没有值的。
一块是heap,也就是堆!堆可以一句话概括,装new出来的东西!

所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!
这样说希望能帮你了解到java的内存分配问题。
作者: Household    时间: 2013-12-8 23:20
        java语言是典型的静态语言,因此java的数组也是静态的,所以java程序的数组需要经过初始化才能使用,初始化是指为数组对象的元素分配内存空间,并为每个元素指定初始值。
       需要明确的是,java的数组变量是一种引用型的变量,数组变量并不是数组本身。他只是指向堆内存中的数组对象。对数组变量来说,它们不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。需要初始化的永远只是该引用变量所引用的对象,而不是引用变量本身。
1. 基本类型数组的初始化:程序先为数组分配内存空间,再将数组元素的值存入相应的内存中;
局部变量都是存放在栈内存中(不管是基本类型的变量还是引用类型的变量,都是存储在各自方法的栈区中),但是数组的所引用的对象中引用的变量是存于堆中的;
2.引用类型数组的初始化:其元素是引用型的变量,java语言不允许直接访问堆内存中的数据;而程序是通过该引用变量间接来访问数组中的引用对象,这样引用对象是存储在堆内存中。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2