簡體   English   中英

Java Singleton 對象只能部分地被垃圾回收嗎?

[英]Can a Java Singleton object be garbage collected only in part?

據我所知,Java 單例對象不能被垃圾收集,除非加載這個類(類加載器)的上下文本身有資格進行垃圾收集。

問題 1:這是正確的還是存在其他可能被垃圾收集的情況?

在我的應用程序中,我有一個 Android Activity 創建一個單例對象。 當我的應用程序在后台時設備內存不足,如果我嘗試打開它並將其帶回前台,我會看到單例對象已被銷毀並重新初始化。

問題#2:如果必須釋放內存並且對單例對象進行垃圾收集,是否有任何情況下單例對象可能不會完全被垃圾收集,而只會對其中的一些靜態變量進行垃圾收集?

在我的應用程序中,我有一個 Android Activity 創建一個單例對象。 當我的應用程序在后台時設備內存不足,如果我嘗試打開它並將其帶回前台,我會看到單例對象已被銷毀並重新初始化。

是的。 這與“垃圾收集”有關。 那是 android 卸載整個應用程序,這是非常不同的。

如果必須釋放內存並且對單例對象進行垃圾收集,是否有任何情況下單例對象可能不會完全被垃圾收集,而只會對其中的一些靜態變量進行垃圾收集?

因此,這個問題主要是不合邏輯的。

有兩種完全不同的機制在起作用:

  1. 有一些空閑的 CPU 周期和/或一些內存壓力,所以做一些垃圾收集。 你不會注意到任何這些——如果你能在源代碼中看到它,它就不會被垃圾收集。

  2. 這還不夠好/設備上正在啟動一個不同的進程,並且垃圾收集正在運行的進程沒有滾雪球的機會來釋放足夠的空間。 在這種情況下,您的整個android 應用程序會直接卸載。 你被殺了,下次你的應用程序受到關注(用戶運行它,或者你有一些觸發的鈎子)時,你的應用程序從頭開始重新加載。

因此沒有半卸載。 根據定義,垃圾收集器所做的任何事情都是不可觀察的(如果是,則不會被收集),並且如果您的應用程序被卸載,整個事情就會消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM