`

Java GC的工作原理详解

    博客分类:
  • JAVA
阅读更多

JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,另外JVM分别对新生代和旧生代采用不同的垃圾回收机制。

首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。

JVM学习笔记 JVM内存管理和JVM垃圾回收

JVM内存组成结构

JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:

 

JVM内存组成结构

 

1)堆

所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由FromSpace和ToSpace组成,结构图如下所示:

 

JVM内存结构之堆

 

新生代。新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活的对象转移到Survivor中,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例旧生代。用于存放新生代中经过多次垃圾回收仍然存活的对象

2)栈

每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果

3)本地方法栈

用于支持native方法的执行,存储了每个native方法调用的状态

4)方法区

存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(PermanetGeneration)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。介绍完了JVM内存组成结构,下面我们再来看一下JVM垃圾回收机制。

JVM垃圾回收机制

JVM分别对新生代和旧生代采用不同的垃圾回收机制

新生代的GC:

新生代通常存活时间较短,因此基于Copying算法来进行回收,所谓Copying算法就是扫描出存活的对象,并复制到一块新的完全未使用的空间中,对应于新生代,就是在Eden和FromSpace或ToSpace之间copy。新生代采用空闲指针的方式来控制GC触发,指针保持最后一个分配的对象在新生代区间的位置,当有新的对象要分配内存时,用于检查空间是否足够,不够就触发GC。当连续分配对象时,对象会逐渐从eden到survivor,最后到旧生代,

用javavisualVM来查看,能明显观察到新生代满了后,会把对象转移到旧生代,然后清空继续装载,当旧生代也满了后,就会报outofmemory的异常,如下图所示:

 

outofmemory的异常

 

在执行机制上JVM提供了串行GC(SerialGC)、并行回收GC(ParallelScavenge)和并行GC(ParNew)

1)串行GC

在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,可以通过-XX:+UseSerialGC来强制指定

2)并行回收GC

在整个扫描和复制过程采用多线程的方式来进行,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式,可用-XX:+UseParallelGC来强制指定,用-XX:ParallelGCThreads=4来指定线程数

3)并行GC

与旧生代的并发GC配合使用

旧生代的GC:

旧生代与新生代不同,对象存活的时间比较长,比较稳定,因此采用标记(Mark)算法来进行回收,所谓标记就是扫描出存活的对象,然后再进行回收未被标记的对象,回收后对用空出的空间要么进行合并,要么标记出来便于下次进行分配,总之就是要减少内存碎片带来的效率损耗。在执行机制上JVM提供了串行GC(SerialMSC)、并行GC(parallelMSC)和并发GC(CMS),具体算法细节还有待进一步深入研究。

以上各种GC机制是需要组合使用的,指定方式由下表所示:

 

GC机制组合使用

分享到:
评论

相关推荐

    Java基础[Java基础]--Java GC工作原理

    ### Java GC工作原理详解 #### 一、引言 在现代软件开发中,Java作为一种广泛使用的编程语言,其强大的功能和高效性深受开发者喜爱。Java的自动内存管理机制是其一大亮点,尤其体现在垃圾收集(Garbage Collection...

    优秀的Java程序员必须了解GC的工作原理

    ### 优秀的Java程序员必须了解GC的工作原理 #### 一、GC的基本原理 Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是Java内存管理的关键组成部分。了解GC的工作原理对于优化Java程序至关重要,尤其是在...

    java垃圾回收(gc)机制详解

    本文将深入探讨Java GC的工作原理、类型、过程以及优化策略。 一、Java垃圾回收的起源与目的 在C++等语言中,程序员需要手动管理内存,分配和释放内存空间。而在Java中,引入了垃圾回收机制,自动处理这些任务,...

    JAVA 内存设置原理

    ### JAVA内存设置原理详解 在深入探讨JAVA内存设置原理之前,我们先理解一下JVM(Java虚拟机)的内存管理机制。JVM是JAVA运行时环境的核心,它负责执行JAVA字节码,同时管理程序运行时的内存分配与回收。JVM的内存...

    Java2编程详解(Special_Edition_Using_Java)

    在Java2平台上,重点是JVM(Java虚拟机)的工作原理和内存管理。书中可能会涉及类加载机制、垃圾回收(GC)以及性能优化策略。对于高级开发者,这部分内容有助于理解Java程序的运行机制,并能解决实际开发中的性能...

    Java垃圾回收机制详解

    ### Java垃圾回收机制详解 #### 一、引言 在软件开发领域,特别是对于像Java这样的面向对象语言,内存管理一直是开发者关注的核心问题之一。Java的出现极大地简化了这一过程,其中最为突出的特点之一就是其内置的...

    Java垃圾回收原理

    ### Java垃圾回收原理详解 #### 一、引言 在现代软件开发中,Java作为一种广泛使用的编程语言,其垃圾回收机制是确保程序高效运行的关键技术之一。本文将深入探讨Java中的垃圾回收机制,包括其基本原理、不同类型...

    JVM、GC详解及调优

    总结,理解和掌握JVM的工作原理以及GC机制,对于优化Java应用性能至关重要。通过细致的调优,可以有效减少垃圾收集的开销,提升系统的稳定性和响应速度。同时,持续监控和分析JVM运行状态,能帮助我们及时发现并解决...

    jvm和gc详解及调优

    《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业书籍,对于Java开发者来说,是进阶提升的必备资料。书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能...

    JAVA基础技术框架详解二.pdf

    Java 基础技术框架详解二 本资源摘要信息中,我们将详细介绍 Java 相关技术框架的各种知识点,涵盖了 Java 语言基础、Java 虚拟机(JVM)、Java 集合框架、Java 并发编程、Java 网络编程、数据存储技术等方面的知识...

    JVM、GC详解及调优_jvm_JVM、GC详解及调优_

    总之,《JVM、GC详解及调优》这份资料将带你深入了解JVM的工作原理,帮助你掌握GC的运作机制,并提供实用的调优技巧,提升Java应用程序的性能。通过持续学习和实践,你将能够更好地管理和优化你的Java应用。

    Java的垃圾收集器(GC)

    ### Java的垃圾收集器(GC)详解 #### 引言 垃圾收集器(Garbage Collector,简称GC)是Java语言的一项重要特性,它自动化管理内存,显著减轻了开发者手动管理内存负担,避免了常见的内存泄漏问题,提高了程序的...

    2019Java面试题答案详解.zip

    9. **JVM内存模型**:了解堆内存、栈内存、方法区、本地方法栈等,以及垃圾回收机制(GC)的工作原理。 10. **设计模式**:单例、工厂、观察者、装饰器等常见设计模式的理解和应用。 "2019Java面试题答案详解.pdf...

    jdk 1.6 gc详解

    本文将深入探讨JDK 1.6中的GC工作原理、内存分配策略以及如何进行问题排查和调优。 首先,理解GC的基本概念,其主要任务是识别并回收那些无引用指向的对象,即所谓的"dead"对象。Hotspot JVM在内存分配上有三种主要...

    java虚拟机JVM详解ppt

    ### Java虚拟机(JVM)详解 #### 一、引言 Java虚拟机(JVM)作为Java编程语言的核心组件之一,其重要性不言而喻...掌握JVM的工作原理有助于开发者编写更高效、更稳定的Java应用程序,并能有效地解决常见的内存溢出问题。

    JVM-GC全面知识系统详解

    GC全面知识系统详解涵盖了JVM内存结构、垃圾回收机制、类加载与字节码技术以及内存模型等多个重要主题。 首先,我们来探讨JVM的内存结构。JVM内存主要分为堆内存和栈内存两大部分。堆内存是所有线程共享的一块区域...

    JVM内幕:java虚拟机详解

    ### JVM内幕:java虚拟机详解 #### 一、概述 ...理解JVM的工作原理对于优化Java程序、解决性能问题具有重要意义。通过深入学习JVM的各个组件及其工作方式,开发人员可以更好地掌握Java编程技巧,提升软件质量。

    JAVA优化编程详解

    包括理解GC工作原理,避免内存泄漏,以及通过调整JVM参数来优化内存分配。 2. **JVM调优**:JVM(Java虚拟机)是Java程序运行的基础,调优JVM参数可以显著提升性能。书中会涵盖如何分析JVM内存使用,理解不同垃圾...

    Java中synchronized实现原理详解

    Java中的`synchronized`关键字是实现线程同步的关键,它的实现原理涉及到多个方面,包括Java对象头、Monitor(监视器锁)以及一系列的锁优化策略。本文将深入探讨这些概念。 首先,`synchronized`用于保证多线程...

Global site tag (gtag.js) - Google Analytics