-
虛擬機(jī)棧(棧幀中的本地變量表)中的引用對象
-
概念解釋:在Java(Android基于Java)虛擬機(jī)執(zhí)行方法時,會為每個方法創(chuàng)建一個棧幀,棧幀中包含本地變量表。本地變量表中存儲了方法中的局部變量,這些局部變量如果是對象引用,那么這個引用所指向的對象就可以作為GC Roots。例如,在一個Activity的
onCreate方法中定義了一個TextView對象,這個TextView的引用存儲在棧幀的本地變量表中,它所指向的TextView對象就可以作為GC Roots。 -
示例代碼:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = new TextView(this); // 此時textView這個引用所指向的TextView對象可作為GC Roots } }
-
概念解釋:在Java(Android基于Java)虛擬機(jī)執(zhí)行方法時,會為每個方法創(chuàng)建一個棧幀,棧幀中包含本地變量表。本地變量表中存儲了方法中的局部變量,這些局部變量如果是對象引用,那么這個引用所指向的對象就可以作為GC Roots。例如,在一個Activity的
-
方法區(qū)中類靜態(tài)屬性引用的對象
-
概念解釋:類的靜態(tài)變量是屬于類本身的,它們存儲在方法區(qū)。如果靜態(tài)變量是一個對象引用,那么這個引用所指向的對象可以作為GC Roots。例如,有一個工具類
Utils,其中有一個靜態(tài)的Bitmap對象作為緩存,這個靜態(tài)Bitmap引用所指向的Bitmap對象就可以作為GC Roots。 -
示例代碼:
class Utils { public static Bitmap cacheBitmap; // 當(dāng)有對象賦值給cacheBitmap時,該對象可作為GC Roots }
-
概念解釋:類的靜態(tài)變量是屬于類本身的,它們存儲在方法區(qū)。如果靜態(tài)變量是一個對象引用,那么這個引用所指向的對象可以作為GC Roots。例如,有一個工具類
-
方法區(qū)中常量引用的對象
- 概念解釋:常量池中的常量如果是對象引用,例如字符串常量池中的字符串對象引用,這些引用所指向的對象可以作為GC Roots。在Java(Android也遵循)中,字符串常量池存儲了字符串字面量。如果一個字符串在程序中被定義為常量并且被引用,那么這個引用所指向的字符串對象可以作為GC Roots。
-
示例代碼:
public class ConstantExample { public static final String CONSTANT_STRING = "Hello"; // CONSTANT_STRING這個常量引用所指向的字符串對象可作為GC Roots }
-
本地方法棧中JNI(Java Native Interface)引用的對象
- 概念解釋:當(dāng)在Android應(yīng)用中使用本地方法(通過JNI調(diào)用C或C++代碼),本地方法棧中JNI引用的對象可以作為GC Roots。例如,在一個Android應(yīng)用中通過JNI調(diào)用了一個C庫中的函數(shù),并且這個函數(shù)返回了一個對象引用給Java層,這個引用所指向的對象可以作為GC Roots。
-
示例說明:假設(shè)存在一個本地方法
nativeMethod,它返回一個對象引用:public class NativeExample { public native Object nativeMethod(); // 當(dāng)調(diào)用nativeMethod得到的對象引用所指向的對象可作為GC Roots }
Android中哪些對象可作為GC Roots呢?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 所有知識點已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)? 在 Jav...
- 引言 經(jīng)過前面五個章節(jié)的分析后,對于JVM的大部分子系統(tǒng)都已闡述完畢,在本文中則開始對JVM的GC子系統(tǒng)進(jìn)行全面闡...
- JVM內(nèi)存管理 根據(jù)JVM規(guī)范,JVM把內(nèi)存劃分成了如下幾個區(qū)域: 方法區(qū)(Method Area) 堆區(qū)(Hea...
- 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講,...
- 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時不同JDK版本的...