Java把内存划分成两种:一种是栈内存,一种是堆内存。请分别解释二者的含义,并说明有何区别?
答案:2 悬赏:80
解决时间 2021-11-17 00:12
- 提问者网友:一人心
- 2021-11-16 07:41
Java把内存划分成两种:一种是栈内存,一种是堆内存。请分别解释二者的含义,并说明有何区别?
最佳答案
- 二级知识专家网友:傲娇菇凉
- 2021-11-16 07:53
(1) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。
(2) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(3) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
(2) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(3) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
全部回答
- 1楼网友:孤伤未赏
- 2021-11-16 09:05
首先superwords a1=new superwords();
subwords a2=new subwords();
分别在栈中产生了一个内存块a1指向堆中的superwords和一个内存块a2指向堆中的subwords!因为subwords是继承superwords的!所以它在内存中的图形为superwords内存块中有个subwords的内存块!
a1.set_words1("cool");
在a1指向的堆块new出来的内存中的属性words1值赋为cool!
a2.set_words2("beautiful");
在a2指向的堆块中new出来的内存中的属性words2的值赋为beautiful!
a1.show_message1();
调用 system.out.println("the whole words is "+words1+" "+words2); 打印
因为words2没有赋值所以输出为:the whole words is cool null
a2.show_message2();
调用system.out.println("the whole words is "+words2+" "+words1); 打印
因为word1没有赋值所以输出为:the whole words is beautiful null!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯