`
淘气天空lc
  • 浏览: 48092 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm-GC 垃圾收集

    博客分类:
  • JVM
 
阅读更多

     JAVA垃圾回收机制,简单来说GC(Garbage Collection)要完成的只有三件事1.内存中那些内存需要回收2.什么时候回收3.如何回收

1.那些对象需要回收

       java是面向对象的语言,如果对象已经死了,那么这些对象是要被回收的,学过操作系统的都知道,操作系统的文件管理中,在删除文件时候,要先判定文件是否有进程在使用,里面用到了一个叫做引用用计数法,只要有进程使用了该文件。引用数加1。如果经常使用完改文件,这个数目就会减1。可能面试的时候我们就会认为java也是使用了这种方式。实际上并非如此。原因可以从以下程序中看出:

public class Test {
    public Object instance = null;
    public  static void  main(){
         Test obj1 = new Test();
         Test obj2 = new Test();
         obj1.instance = obj2;
         obj2.instance=obj1;
         System.gc();
    }

}

 对象也会被回收,所以java使用的不是引用计数法

而java使用的是根搜索法,这里有一个名词叫做 ‘GC Roots’,来判定对象是否存活,如果一个对象到一个GC roots没用任何引用链存在,那么说明此对象是不可的,因为GC Roots对象都是方法执行时所使用的、如果没有引用说明这个对象是没有用。

GC Roots对象包括:

1.虚拟机栈

2.方法区中类静态属性引用的对象

3.方法区中的常量引用的对象

4.本地方法栈(navtive 方法)

垃圾回收的集中算法:

1标记清除算法:首先要标记所有需要回收的对象,在标记完成后统一回收掉所有标记的对象

2.复制算法:把存活的对象复制到另一块内存上面,叫做survivor区,然后把已经使用的内存全部清除掉

3.标记整理算法:把所有存活的对象都往内存的一端移动,然后再删除它占用的内存块。

基于这些方式,JDK提供了,很多种垃圾收集器

Serial收集器:是最基本,历史最悠久的收集器,但是它有一个致命的弱点就是在GC时,必须停止所有的工作线程。工作:分为新生代采用复制算法,而老生代采用标记整体法。单线程执行。

ParNew收集器:其实他是Serial收集器的多线程版本,其他所有的控制参数都和Serial一样。

Parallel Scavenge收集器:它是一种新生代收集器,也是使用复制算法的收集器,但是它是并行执行的,也就是说,他进行GC时。用户进程并不会停止。

Serial Old收集器:它是老年代版本,也同样是单线程收集器,使用标记整体算法,主要有两大用途:一个是在JDK1.5的版本中与Parallel Scavenge收集器搭配使用,另一个就是作为CMS收集器的后备。关于CMS马上会介绍。

Parallel Old:他是Parallel Old的老年代版本,使用多线程和标记整理算法,since 1.6 ,

CMS收集器:他是一种以获取最短停顿时间为目标的德收集器,一些互联网java应用都是用这种收集器,互联网应用很重视响应速度,他是基于标记-清除算法,它提供了一个参数用来标记触发临界点。-XX:CMSInitiatingOccupancyFraction的值,它指示在老年代被使用比值,开始GC。

jvm堆分为新生代和老生代。而新生代分为Eden,survival区

 

分享到:
评论

相关推荐

    jvm-full-gc调优-jvm-full-gc.zip

    在Java开发中,JVM(Java虚拟机)的性能优化是一项关键任务,特别是对于大型系统而言,频繁的Full GC(垃圾收集)会导致应用暂停时间过长,影响用户体验。本资料"jvm-full-gc调优-jvm-full-gc.zip"显然是针对如何...

    用于测试jvm gc调优-share-jvm-gc.zip

    Java虚拟机(JVM)是Java程序运行的基础,它的垃圾收集器(GC)是自动管理内存的核心机制。在Java应用程序中,尤其是对于大型系统或高并发环境,进行JVM GC调优是提升性能、减少系统停顿时间的关键步骤。"用于测试...

    jvm-full-gc.zip

    "jvm-full-gc.zip"中的示例可能涵盖如何通过配置JVM参数来调整垃圾收集策略,以及如何分析和优化Full GC的性能。例如,通过设置`-XX:+PrintGCDetails`和`-XX:+PrintGCDateStamps`参数,可以输出详细的GC日志,以便...

    JVM-GC全面知识系统详解

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(GC)。GC全面知识系统详解涵盖了JVM内存结构、垃圾回收机制、类加载与字节码技术以及内存模型等多个重要主题。 首先,我们来探讨JVM...

    深入java虚拟机光盘源码-jvm-gc-logs-analyzer:jvm-gc-logs-analyzer

    虚拟机和垃圾收集器日志分析器。 它专用于 JVM 11 及更高版本(JVM 8 支持正在开发中)。 日志必须采用适当的格式和适当的装饰器,检查最后部分的限制和工作示例。 该项目创建了两个工件: Analyzer-web.jar - 部署...

    jvm-mon基于控制台的JVM监视

    2. **GC活动追踪**:它会记录垃圾收集器的活动,如Minor GC和Major GC的触发次数、耗时,有助于理解垃圾回收对性能的影响。 3. **线程状态**:`jvm-mon`可展示当前运行的线程数量及状态,如RUNNABLE、WAITING、...

    jvm-int-gc-benchmark:JVM 内部 - 垃圾收集基准

    总结来说,"jvm-int-gc-benchmark"项目旨在通过对JVM内部垃圾收集的基准测试,深入了解不同GC策略的性能特性。通过这种方式,开发者能够优化Java应用的内存管理,减少不必要的性能损耗,提升应用的整体性能。在实践...

    weilei-JVM-ppt.rar

    3. **内存管理**:详细讲解堆内存、栈内存、方法区、程序计数器、本地方法栈等区域的分配与回收,特别是垃圾收集机制,如分代收集、标记-清除、复制算法、标记-整理、CMS和G1等。 4. **字节码执行**:解释字节码...

    jvm-demo.zip

    JVM通过类加载器、运行时数据区、执行引擎、本地方法接口和垃圾收集机制等组件协同工作,确保Java程序的高效运行。 2. **类加载机制** JVM的类加载机制包括加载、验证、准备、解析和初始化五个阶段。"jvm-demo...

    jvm调优测试仓库-jvm-monitor.zip

    1. 垃圾收集器:JVM的内存管理主要依赖垃圾收集器,不同的收集器有不同的工作策略。例如,新生代的Serial、ParNew和G1,老年代的Parallel Old、CMS和ZGC等。理解这些收集器的工作机制是调优的基础。 2. 内存配置:...

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms.zip

    在Java虚拟机(JVM)中,垃圾收集(GC)是自动管理内存的重要部分,它负责识别并清除不再使用的对象,以防止内存泄漏。本文将深入探讨两个重要的垃圾收集器——ParNew和Concurrent Mark Sweep (CMS) ——以及它们在...

    【IT十八掌徐培成】Java基础第26天-03.JVM结构-finalize-gc.zip

    在本课程"【IT十八掌徐培成】Java基础第26天-03.JVM结构-finalize-gc"中,我们将深入探讨JVM的结构、`finalize`方法以及垃圾收集(Garbage Collection,简称GC)机制。以下是这些主题的详细阐述: 1. JVM结构: - ...

    JVM-性能调优垃圾收集算法虚拟机组成

    Java虚拟机(JVM)是Java程序运行的基础,它负责解析和执行字节码,管理内存,以及执行垃圾收集等重要任务。对于任何Java开发者来说,理解和掌握JVM的性能调优、垃圾收集算法以及虚拟机的组成是提高应用程序效率的...

    jvm-profiler,jvm分析器向kafka、控制台输出或自定义报告器发送度量.zip

    3. **GC行为**:分析垃圾回收的频率和时间,优化内存管理策略。 4. **线程状态**:监控线程的运行和等待情况,排查线程死锁或阻塞问题。 5. **类加载**:分析类的加载和卸载,优化类的加载策略。 这个工具的一大...

    Jvm调优练习-jvm-tuning.zip

    JVM调优涉及到调整一系列参数,以优化应用程序的性能,包括内存分配、垃圾收集策略、线程管理以及编译器优化等。 【描述】"Jvm调优练习-jvm-tuning" 暗示了这个压缩包可能包含一系列实验或教程,帮助用户通过实际...

    JAVA-JVM-全面/发展史/GC.zip

    现代JVM如OpenJDK和Oracle JDK已经采用了更先进的垃圾收集算法,如G1、CMS和ZGC,以提高应用程序的性能和响应时间。 在“JAVA-笔记.pdf”中,你可能会学到如何理解和分析JVM内存配置,以及如何通过JConsole、...

    JVM初探- 内存分配、GC原理与垃圾收集器

    JVM内存管理是Java虚拟机的核心机制之一,其主要包含对象的创建、内存分配、...通过对内存分配策略、对象生死判定、垃圾收集算法和垃圾收集器的理解与应用,可以更好地掌握JVM的内存管理,从而提升应用性能和稳定性。

    java jvm-old gc耗时几十s,导致系统告警(csdn)————程序.pdf

    在Java应用程序中,JVM(Java虚拟机)的垃圾收集(Garbage Collection, GC)是自动管理内存的关键机制。当对象不再被引用时,GC负责回收这些无用的对象所占用的内存空间,以避免内存泄漏。然而,如果GC过程耗时过长...

    jvm基础知识与调优-jvm-training.zip

    - 垃圾收集算法:标记-清除、复制、标记-整理、分代收集等。 - CMS(Concurrent Mark Sweep):并发标记清除,降低Full GC的停顿时间。 - G1(Garbage-First):并行和并发的垃圾回收器,目标是减少停顿时间。 4...

Global site tag (gtag.js) - Google Analytics