A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© panningwjr 中级黑马   /  2013-8-5 17:04  /  1552 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-6 21:30 编辑

对java内存管理了解的不是特别透彻,基本类型数组和引用类型数组在初始化时内存分配机制有什么区别?
查了不少工具书,还是不太明白,希望哪位能解释得透彻点,谢谢了!

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

2 个回复

倒序浏览
Java的内存分配上,主要分4个块!
一块是用来装代码的,就是编译的东西。
一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量。
一块是stack,也就是栈,是用来装变量和引用类型的!但区别在于,装了变量以后,变量上是有值的,而引用类型本身在stack上是没有值的。
一块是heap,也就是堆!堆可以一句话概括,装new出来的东西!

所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!
这样说希望能帮你了解到java的内存分配问题。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
        java语言是典型的静态语言,因此java的数组也是静态的,所以java程序的数组需要经过初始化才能使用,初始化是指为数组对象的元素分配内存空间,并为每个元素指定初始值。
       需要明确的是,java的数组变量是一种引用型的变量,数组变量并不是数组本身。他只是指向堆内存中的数组对象。对数组变量来说,它们不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。需要初始化的永远只是该引用变量所引用的对象,而不是引用变量本身。
1. 基本类型数组的初始化:程序先为数组分配内存空间,再将数组元素的值存入相应的内存中;
局部变量都是存放在栈内存中(不管是基本类型的变量还是引用类型的变量,都是存储在各自方法的栈区中),但是数组的所引用的对象中引用的变量是存于堆中的;
2.引用类型数组的初始化:其元素是引用型的变量,java语言不允许直接访问堆内存中的数据;而程序是通过该引用变量间接来访问数组中的引用对象,这样引用对象是存储在堆内存中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马