p7付费课程笔记5:串行gc以及并行gc
发布人:shili8
发布时间:2025-03-12 05:37
阅读次数:0
**P7付费课程笔记:串行GC与并行GC**
在Java虚拟机中,垃圾回收(Garbage Collection, GC)是为了回收不再使用的内存空间而进行的一系列操作。GC有两种主要类型:串行GC和并行GC。
**1.串行GC**
串行GC是一种最基本的GC方式,它在一个线程上执行垃圾回收,整个过程是串行的。在Java虚拟机中,串行GC通常用于小型应用程序或测试环境。
###串行GC流程1. **检测可回收对象**:GC开始扫描堆中的所有对象,找出哪些对象已经不再被引用。
2. **标记阶段**:GC将这些不可达的对象标记为垃圾。
3. **清除阶段**:GC释放这些标记为垃圾的对象所占用的内存空间。
###串行GC示例代码
javapublic class SerialGCTest { public static void main(String[] args) { // 创建一个大型数组,占用大量内存 byte[] bigArray = new byte[1024 *1024]; // 在主线程中执行垃圾回收 System.gc(); // 等待GC完成后继续执行程序 try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }
###串行GC优缺点**优点:**
* 简单易懂,容易实现。
* 在小型应用程序或测试环境中性能较好。
**缺点:**
* GC过程是串行的,会导致程序暂停执行。
* 不适合大型应用程序或高负载环境。
**2. 并行GC**
并行GC是一种更为复杂的GC方式,它在多个线程上同时执行垃圾回收。这种方式可以显著提高GC的效率和吞吐量。
### 并行GC流程1. **检测可回收对象**:GC开始扫描堆中的所有对象,找出哪些对象已经不再被引用。
2. **标记阶段**:GC将这些不可达的对象标记为垃圾。
3. **清除阶段**:GC释放这些标记为垃圾的对象所占用的内存空间。
### 并行GC示例代码
javapublic class ParallelGCTest { public static void main(String[] args) { // 创建一个大型数组,占用大量内存 byte[] bigArray = new byte[1024 *1024]; // 在多个线程中执行垃圾回收 Thread thread1 = new Thread(() -> System.gc()); Thread thread2 = new Thread(() -> System.gc()); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }
### 并行GC优缺点**优点:**
* GC过程是并行的,提高了GC效率和吞吐量。
* 适合大型应用程序或高负载环境。
**缺点:**
* 需要多个线程来执行GC,增加了系统资源占用。
* GC过程可能会导致程序暂停执行。
综上所述,串行GC和并行GC都是Java虚拟机中垃圾回收的两种主要类型。串行GC简单易懂,但不适合大型应用程序或高负载环境,而并行GC可以显著提高GC效率和吞吐量,但需要多个线程来执行GC,增加了系统资源占用。