作者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