再次進入程式,Java靜態變數與成員變數的不同表現和對單例模式的思考

來源:互聯網
上載者:User

標籤:

我們知道,在儲存方式上,成員變數在JVM中是儲存在堆裡邊的,而靜態變數則位於JVM中的方法區,兩者的主要區別在於,成員變數不再受引用常常會導致被回收,而方法區對記憶體回收的限制相當嚴苛,除非是整個應用被卸載,否則靜態變數會一直存在。

在android應用中使用成員變數,在退出應用之後,所有的成員變數肯定會被回收,而靜態變數則相反。尤其是在UI設計上,如果你自訂一個static的viewgroup,建立時候為其addchlid,你就一定要考慮到這個情況,因為再次進入程式,還是會調用addchild方法,這樣肯定會報錯,如果child是動態建立的,那麼每次viewgroup都會有新的成員填進來,如果child是成員變數什麼的,由於此變數一直有個靜態引用存在,所以不會被消除,再次添加會報child can only have a parent錯誤。還有一種情況,如果child也是靜態變數,那麼靜態變數一多,佔用的記憶體開銷...尤其是手機上。

綜上,在UI設計定義單例模式,感覺不太靠譜,除非是沒有子組件的,要不為了避免報child can only have a parent錯,要不斷地判斷孩子有沒有父親,有父親的話,從父親裡把孩子移除(因為總有個靜態父親在引用你)。

再次進入程式,Java靜態變數與成員變數的不同表現和對單例模式的思考

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.