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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 垃圾收集 > 原文: [https://javatutorial.net/java-garbage-collection](https://javatutorial.net/java-garbage-collection) 本文討論了有關 Java 垃圾收集(GC)的知識,該垃圾收集被視為 Java 編程語言中的復雜主題之一。 顧名思義,java 中的垃圾收集功能可以自動從內存中搜索,發現和刪除垃圾,而無需用戶明確執行此工作。 這里的垃圾是指未引用的對象。 有多種方法可以使對象成為未引用和無用的對象。 一些是: * 引用的清零 * 將引用分配給另一個 * 匿名對象等等 因此,垃圾收集功能會找出這些對象并自動將其從內存中刪除并刪除它們,從而實現高效的內存使用和管理。 如果要用 C 語言進行相同的垃圾收集和優化,則可以使用`free()`函數,而在 C++ 中,則可以使用`delete()`方法。 因此,Java 中此過程實現了自動化,從而為用戶減少了麻煩。 從技術上講,Java 垃圾收集處理的是跟蹤 [JVM(Java 虛擬機)](https://javatutorial.net/jvm-explained)堆空間中的每個對象,并刪除(刪除/取消分配)未使用的對象。 垃圾收集(GC)實現有 4 種類型: 1. 串行垃圾收集器 2. 并行垃圾收集器 3. CMS 垃圾收集器 4. G1 垃圾收集器 ## 串行垃圾收集器 GC 的此實現僅使用一個線程,并且在運行時凍結所有應用程序線程。 因此,它不是在多線程應用程序中使用的最佳選擇。 所有垃圾收集事件都在一個線程中串行進行。 它用于對暫停時間要求不高且在客戶端樣式的計算機上運行的應用程序中。 它是為單線程系統設計的,是 JVM 中較小堆大小的首選。 ## 并行垃圾收集器 此變體是 [JVM](https://javatutorial.net/jvm-explained) 的默認垃圾收集器,也稱為吞吐量收集器。 并行 GC 在管理堆時利用多個線程,而串行 GC 則不然。 但是,像串行 GC 一樣,它在運行時也會凍結其余的應用程序線程。 可以指定最大垃圾收集線程以及暫停時間,吞吐量和占用空間(堆大小)。 ## CMS 垃圾收集器 CMS 代表并發標記掃描,并同時使用多個 GC 線程來掃描堆并標記未引用的對象,這些對象隨后在掃描中被刪除/取消分配。 對于那些需要短時間垃圾收集暫停并能夠負擔與 GC 共享資源的應用程序,它是首選。 使用該 GC 實現的應用程序比不使用 GC 的應用程序要慢,但是在執行垃圾收集時它們不會完全暫停整個應用程序。 在兩種情況下,垃圾收集器的這種含義進入了“世界停止”(STW)模式: * 在初始化根的初始標記時 * 當算法同時運行時,應用程序更改了堆的狀態時; 強制其返回以確保標記了正確的對象。 當對象從年輕一代移動到老一代并且收集器沒有足夠的時間在老一代中騰出空間時,會遇到升級失敗。 ## G1 垃圾收集器 G1 代表垃圾優先 GC,適用于在具有大內存的多處理器計算機上運行的應用程序。 與 CMS 收集器相比,它具有更高的性能效率。 G1 GC 將堆劃分為一組大小相等的堆區域,并標記并發的全局標記階段,以確定是否正在使用堆中的對象。 標記完成后,GC 知道哪些區域大部分為空。 然后,GC 首先從這些區域收集垃圾(這稱為清掃階段),從而產生大量可用空間。 因此,該名稱首先是垃圾。 ## 垃圾收集的好處: * 沒有手動的內存分配/取消分配處理,因為 GC 會自動處理未使用的內存空間 * 沒有處理懸空指針的開銷 * 自動內存泄漏管理 ## 垃圾收集的缺點: * 跟蹤對象引用的創建/刪除需要更多的 CPU 能力,并且可能會影響需要大內存的請求的性能 * 程序員無法控制專用于釋放不再需要的對象的 CPU 時間的調度 * 使用某些 GC 實現可能會導致應用程序意外停止 * 在某些情況下,自動內存管理可能不如適當的手動內存分配/取消分配那樣有效。 **一個簡單的程序,顯示 Java 垃圾收集的實現**: ```java public class TryingGrabageCollection{ public void finalize(){ System.out.println("Object has been collected by the garbage collector!"); } public static void main(String args[]){ TryingGrabageCollection obj1 = new TryingGrabageCollection (); TryingGrabageCollection obj2 = new TryingGrabageCollection (); obj1 =null; obj2 =null; System.gc(); } } ``` 輸出: ```java Object has been collected by the garbage collector! Object has been collected by the garbage collector! ```
                  <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>

                              哎呀哎呀视频在线观看