<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java 中的垃圾收集 > 原文: [https://beginnersbook.com/2013/04/java-garbage-collection/](https://beginnersbook.com/2013/04/java-garbage-collection/) 當 JVM 啟動時,它會創建一個堆區域,稱為運行時數據區域。這是存儲所有對象(類的實例)的地方。由于該區域有限,因此需要通過移除不再使用的對象來有效地管理該區域。從堆內存中刪除未使用的對象的過程稱為**垃圾收集**,這是 Java 中內存管理的一部分。 像 C/C++ **這樣的語言沒有**支持自動垃圾收集,但是在 java 中,垃圾收集是自動的。 現在我們知道 java 中的垃圾收集是自動的。讓我們看看 java 何時執行垃圾收集。 ## 什么時候 java 執行垃圾收集? **1.當對象不再可達時:** ```java BeginnersBook obj = new BeginnersBook(); obj = null; ``` 這里引用`obj`指向類`BeginnersBook`的對象,但由于我們為它分配了一個空值,因此它不再指向該對象,這使得`BeginnersBook`對象無法訪問,因此無法使用。這些對象可自動用于 Java 中的垃圾收集。 另一個例子是: ```java char[] sayhello = { 'h', 'e', 'l', 'l', 'o'}; String str = new String(sayhello); str = null; ``` 這里`String`類的引用`str`指向堆內存中的字符串`"hello"`,但由于我們已將空值賦給`str`,因此堆內存中存在的對象`"hello"`不可用。 **2.將一個引用復制到另一個引用時:** ```java BeginnersBook obj1 = new BeginnersBook(); BeginnersBook obj2 = new BeginnersBook(); obj2 = obj1; ``` 這里我們已經將引用`obj1`分配給`obj2`,這意味著`obj2`指向的(引用)實例(對象)不可訪問并且可用于垃圾收集。 ## 如何請求 JVM 進行垃圾回收 我們現在知道無法訪問和不可用的對象可用于垃圾收集,但垃圾收集過程不會立即發生。這意味著一旦對象準備好進行垃圾回收,他們就必須等待 JVM 運行執行垃圾收集的內存清理程序。但是,您可以通過調用`System.gc()`方法請求 JVM 進行垃圾回收(請參閱下面的示例)。 ### Java 中的垃圾收集示例 在這個例子中,我們通過調用`System.gc()`來演示垃圾收集。在這段代碼中,我們[重載](https://beginnersbook.com/2014/01/method-overriding-in-java-with-example/)了一個`finalize()`方法。在 Java 垃圾收集過程銷毀對象之前調用此方法。這就是您在輸出中看到此方法已被調用兩次的原因。 ```java public class JavaExample{ public static void main(String args[]){ /* Here we are intentionally assigning a null * value to a reference so that the object becomes * non reachable */ JavaExample obj=new JavaExample(); obj=null; /* Here we are intentionally assigning reference a * to the another reference b to make the object referenced * by b unusable. */ JavaExample a = new JavaExample(); JavaExample b = new JavaExample(); b = a; System.gc(); } protected void finalize() throws Throwable { System.out.println("Garbage collection is performed by JVM"); } } ``` 輸出: ```java Garbage collection is performed by JVM Garbage collection is performed by JVM ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看