作者jackyhuang (雪.狼.湖)
看板java
标题Re: [问题] 问一个 记忆体 和 GC 的问题
时间Mon Jan 30 02:29:11 2006
※ 引述《PsMonkey (痞子军团团长)》之铭言:
: ※ 引述《jackyhuang (雪.狼.湖)》之铭言:
: fooMethod2(){
: FOO foo = new FOO();
: }
: 当然,如果每次 foo 都是用相同位置,那就没差
: 不过,那实在不太合乎道理
: 有错还请指正
你这样的做法,还是将FOO instance建立在heap space
主要的问题就出在你和我对"local variable"这个字的看法有差异
严格来说,foo是local variable, 而foo指向某一个FOO instance
foo里所存的值是存在stack中,而object instance是在heap中
但你这样的做法和你之前说用local会花更多记忆体也没道理
因为不管你使用local variable或instance member来hold产生的物件
都是产生在heap space,根本不会有什麽差异。(透过new operator都是在heap)
顶多是你用instance member可以hold住你最後一次loop产生的instance罢了
tkcn的回文让我认为,他指的情况是将prmitive type传入,
以传入long来说也只要64bit,所以我才会说call by value占不了多少memory
如果你传入的是reference type,那也只不过是把reference "value" copy一份传过去
所以怎麽说都不会通 (而且return就释放了)
我想如果你有写或读过C++的话,
就会知道其实是有Local Object(Automatic Object)这种东西
所以我们讨论起来才会有点鸡同鸭讲,C++的物件是可以产生在stack中的
说得有点杂,我只是想表达一点,"使用区域变数反而会增加记忆体用量"这句话
我觉得不太正确~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.209.88