中易网

Java把内存划分成两种:一种是栈内存,一种是堆内存。请分别解释二者的含义,并说明有何区别?

答案:2  悬赏:80  
解决时间 2021-11-17 00:12
Java把内存划分成两种:一种是栈内存,一种是堆内存。请分别解释二者的含义,并说明有何区别?
最佳答案
(1) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。
(2) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(3) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
全部回答
首先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!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大话西游2宝宝什么时候可以吃猕猴桃吗
曲附什么什么意思?
佛山如意陶瓷砖地址在什么地方,想过去办事
喝统一绿茶饮料会胖吗
剑圣和诺克萨斯单挑,谁会赢
为了改善生态环境,防止水土流失,某村计划在荒
三星note7屏幕右边怎么有个白条
累觉不爱是什么意思
淄博到沂南智圣温泉路线
致语堂怎么样??产品好吗?
什么东西可以自制美白补水面膜呢,补水效果好
1974年邮票有哪些值钱
适合夏季吃的菜谱
青岛哪里能买到普利司通汽车轮胎
求这个女忧的名字,谁知道就给他一百分!
推荐资讯
(孤独旧时光)求这句话的英文翻译。
幼儿成长手册假期我在家的表现怎么写
枫香叶有什么功效作用?
北京移动二轮面试什么时候开始,谢谢
格丽师是什么东西?多少钱?
义乌的高铁站在哪里?
牵牛花叶的资料
麻友友新拍的电视剧叫什么。。看了宣传片、内
圆周上有八个等分圆周的点,以这些等分点为顶
崆峒区索罗供电所地址在什么地方,想过去办事
衣柜清香怎么做到?
逸乐网吧地址有知道的么?有点事想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?