永发信息网

java栈stack和堆heap的工作原理,用途和区别?

答案:1  悬赏:30  手机版
解决时间 2021-03-25 08:58
java栈stack和堆heap的工作原理,用途和区别?
最佳答案
java堆和栈的区别

Java中内存分成两种:一种是栈stack,一种是堆heap。

函数中的一些基本类型的变量(int, float)和对象的引用变量(reference)都在函数的栈中,马克-to-win,(工作于编译阶段, 生成class文件之前)分配。存取速度快,稍逊于寄存器, 比堆快,

函数执行完后,Java会自动释放掉为函数里变量开辟的栈内存空间,该内存空间可以立即被另作他用。

堆heap内存用来存放由new创建的对象和数组。堆内存,负责运行时(runtime, 执行生成的class文件时)数据,由JVM的自动管理。缺点是,存取速度较慢。

栈中的引用变量指向堆中的对象或数组。


中有共享池的概念,比如下面例子中,sz="hello";在栈中创建一个String对象引用变量sz,然后看看栈中有没有"hello",如果没有,
则将"hello"存放进栈,并令sz指向”hello”,如果已经有”hello” 则直接令sz指向“hello”。对于int, float
类型的变量也是一样的有这种共享池的概念,注意上述的工作是在compile(编译)的阶段完成的,而不是runtime运行时完成的。


于下面程序中:ss0 = new String( "hello"
);是用new()来新建对象的,存于堆中。每调用一次就会创建一个新的对象。当然从节省空间的角度来讲,肯定不如str="hello",有童鞋一定
问,那要它有什么用?当时设计编译器时,为什么要设计它?马克-to-win,那我请问你,如果在你编程序时,你还不知道字符串内容怎么办?这时就用到
new String,所以,什么都有什么的用处。

public class Test
{
public static void main(String args[]) {
String str, str1, ss0, ss1, ss2, ss3, ss4;
str = "hello";
。。。。。。。。。。。。。。。。详情网上找“马克-to-win”,参考他的网站或他的百度空间:java第2章的内容
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
东方神起在中为允浩受伤事件发脾气具体是怎样
TTL是什么意思,有的芯片资料上有 TTL兼容是
很喜欢被人骂正常吗
晚上有个酒局喝什么可以尽量不醉
有没有那种可以在线DIY制作小程序的平台啊,
太阳,月亮和上升星座各代表什么意思?
汇兑损益如何做会计分录
葱蒜油如何做
剪一段时光缓缓流淌 流进了月色中微微荡漾是
顺德龙江去香港可以在哪里买直达车的票,现在
先有风扇还是先有直升机
缅甸距离北京多少公里
谈恋爱的时候没事总是在想他在做什么,一天他
轻质砖隔墙需要抹灰吗
旅居海外一年以上怎么办理签证
推荐资讯
麦芽糊精属于复合碳水化合物还是简单碳水化合
什么简单的手势密码好看
跪求一首英文歌!!!!!!!是个男人唱的,
奢莲化妆品好不好用有没有副作用
用两根两米长做高度两根两米长做长度做一等边
宋代河南行省是不是相当于现在的河南省
今天晚上被一个小哥哥撩了,他用快手里面的套
采购部里的PE是什么意思
(19分)材料一:近几年,“庸俗、低俗、媚俗
深圳市社保卡单位预申请系统 怎么操作
长安之星2鼓风机吱吱响
Im(z)和Re(z)是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?