java内存分配问题
看我理解的是否正确:Strings3="abc1";Strings2=s3+"范";Strings1="abc1范";“abc1”一个“范”一个“abc1范”一个一共开辟...
看我理解的是否正确:
String s3 = "abc1";
String s2= s3 + "范";
String s1="abc1范";
“abc1” 一个 “范”一个 “abc1范”一个 一共开辟了三个内存控件
s3指向“abc1” s2指向“abc1与范” s1指向“abc1范”
我是这样理解的
还有在内存中 是不是栈里放的是地址 堆里放的是对象 展开
String s3 = "abc1";
String s2= s3 + "范";
String s1="abc1范";
“abc1” 一个 “范”一个 “abc1范”一个 一共开辟了三个内存控件
s3指向“abc1” s2指向“abc1与范” s1指向“abc1范”
我是这样理解的
还有在内存中 是不是栈里放的是地址 堆里放的是对象 展开
展开全部
这个一般人不会知道的,其实如果定义一个字符串有两种方式一种是String str=new String("xx");这种是在内存中分配,而你这样定义String s3 = "abc1";这种方式是将字符串定义在虚拟机的字符串常量池中的,而JVM中的常量池在内存当中是以表的形式存在的,建议你看一下字符串常量池相关的文章。由于常量的值在编译的时候就被确定了,所以这个答案应该是2个,分别是“abc1”和"abc1范"。你好好理解一下哈。
至于你说的堆和栈的问题你就要好好理解一下java里的垃圾收集机制的,一般的你建立一个对象ClassType type = new ClassType();其中type叫对象的引用(也叫句柄)这个对象引用都是放在栈中的,其保存的是对你new出来的一个对象的指向(你也可以理解为地址),而你new出来的对象就保存在堆内存中。当jvm的内存占用到一定的值时,jvm就会检查保存对象引用的栈表,如果发现没有指向的引用就将那部分内存释放掉。
很清楚吧 望采纳哈
至于你说的堆和栈的问题你就要好好理解一下java里的垃圾收集机制的,一般的你建立一个对象ClassType type = new ClassType();其中type叫对象的引用(也叫句柄)这个对象引用都是放在栈中的,其保存的是对你new出来的一个对象的指向(你也可以理解为地址),而你new出来的对象就保存在堆内存中。当jvm的内存占用到一定的值时,jvm就会检查保存对象引用的栈表,如果发现没有指向的引用就将那部分内存释放掉。
很清楚吧 望采纳哈
展开全部
堆和栈都是内存上的一快空间,
只是栈是先进后出的,就像一个长管子,只一边有留孔,向里面放东西,
先放入的在底部,后放入的在先放入的上面,要想拿出先放入的,要先拿出后放入的.
堆就象一块空地,可以随便放,和随便取. 栈的执行速度快,而堆的执行速度相比就慢了下来,因为他可以随时,随大小存取
栈里放的不只是地址 也放Java类的定义
堆里放的都是动态数据(对象) 比如说new a()
只是栈是先进后出的,就像一个长管子,只一边有留孔,向里面放东西,
先放入的在底部,后放入的在先放入的上面,要想拿出先放入的,要先拿出后放入的.
堆就象一块空地,可以随便放,和随便取. 栈的执行速度快,而堆的执行速度相比就慢了下来,因为他可以随时,随大小存取
栈里放的不只是地址 也放Java类的定义
堆里放的都是动态数据(对象) 比如说new a()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String s2= s3 + "范"; 整个开辟的另外一个空间。
你的理解不全对。栈里也放Java类的定义。
你的理解不全对。栈里也放Java类的定义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询