`

JVM垃圾收集器异同

 
阅读更多
VM 垃圾收集器有3类,这里主要介绍我们常用的 并行和并发收集器:

The Throughput Collector (也叫并行收集器)

串行收集器在GC时会停止其他所有工作线程(stop-the-world),CPU利用率是最高的,所以适用于要求高吞吐量(throughput)的应用,但停顿时间(pause time)会比较长,所以对web应用来说就不适合,因为这意味着用户等待时间会加长。而并行收集器可以理解是多线程串行收集,在串行收集基础上采用多线程方式进行GC,很好的弥补了串行收集的不足,可以大幅缩短停顿时间(如下图表示的停顿时长高度,并发比并行要短),因此对于空间不大的区域(如young generation),采用并行收集器停顿时间很短,回收效率高,适合高频率执行。





The Concurrent Low Pause Collector(也叫并发收集器)

并发收集器GC时GC线程和应用线程大部分时间是并发执行,只是在初始标记(initial mark)和二次标记(remark)时需要stop-the-world,这可以大大缩短停顿时间(pause time),所以适用于响应时间优先的应用,减少用户等待时间。由于GC是和应用线程并发执行,只有在多CPU场景下才能发挥其价值,在执行过程中还会产生新的垃圾floating garbage,如果等空间满了再开始GC,那这些新产生的垃圾就没地方放了,这时就会启动一次串行GC,等待时间将会很长,所以要在空间还未满时就要启动GC。mark和sweep操作会引起很多碎片,所以间隔一段时间需要整理整个空间,否则遇到大对象,没有连续空间也会启动一次串行GC。采用此收集器(如tenured generation),收集频率不能大,否则会影响到cpu的利用率,进而影响吞吐量。




针对年轻代和年老代,收集器的设置参数也是有区别的,如下:

the following collectors operate on the young generation:
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParNewGC

the following collectors operate on the old generation:
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
同一代的参数只能设置一个,-XX:+UseParNewGC和-XX:+UseConcMarkSweepGC是推荐的一个组合。

ava GC日志可以通过 +PrintGCDetails开启

以ParallelGC为例
YoungGC日志解释如下




FullGC:


  • 大小: 24.5 KB
  • 大小: 38.1 KB
  • 大小: 88.3 KB
  • 大小: 134.3 KB
分享到:
评论

相关推荐

    java基础及中级面试题+jvm面试题+集合面试题

    2. **垃圾回收**:理解垃圾回收机制,如GC算法(如标记-清除、复制、标记-整理、分代收集)及其优化。 3. **类加载机制**:学习类加载的双亲委托模型,以及类加载器的层次结构。 4. **JVM参数调优**:掌握JVM性能...

    Java编程思想学习笔记

    JVM系统架构包括类装载器、执行引擎、运行时数据区和垃圾收集器等。其中,运行时数据区包括方法区、堆、Java栈、PC寄存器和本地方法栈。垃圾收集器(GC)的作用是回收不再被使用的内存空间,是JVM内存管理的重要组成...

    Java面试八股文十万字总结.docx

    - **JVM性能调优参数**:堆大小、垃圾收集器选择等。 - **逃逸分析技术**:判断对象的使用范围,优化内存分配。 - **元空间替代永久代的原因**:解决永久代的容量限制问题。 - **Stop The World机制**:暂停所有用户...

    60道必备的Java核心技术面试题!.zip

    - **垃圾收集器**:了解不同的垃圾收集器,如Serial、Parallel、CMS、G1等。 - **对象的生命周期**:创建、可达性分析、垃圾回收和对象终结。 6. **并发编程** - **线程**:创建线程的方式,如Thread类和...

    Java面试基础全集

    - **垃圾回收**:了解Java内存模型,理解垃圾收集的工作原理和不同垃圾收集器。 - **内存泄漏**:认识内存泄漏的危害,学习如何避免内存泄漏。 7. **IO流**: - **流的分类**:理解字节流和字符流的区别,以及...

    JAVA面试题解惑系列.zip

    8. **垃圾回收机制**:掌握Java内存模型,了解GC(垃圾收集器)的工作原理,如新生代、老年代、Minor GC和Full GC。 9. **多线程**:线程的创建与管理,同步控制(如synchronized、Lock),以及死锁、活锁和饥饿...

    2022最新Java面试题及答案总结

    Java使用垃圾收集器自动回收不再使用的对象,以防止内存泄漏。程序员可以通过`System.gc()`建议启动垃圾收集,但不应过度依赖此操作。 16. **JVM内存模型**: JVM内存分为堆内存(Heap)、栈内存(Stack)、方法...

    【美团】Java 岗 154 道面试题1

    37. **串行和吞吐量收集器**:串行收集器适用于单CPU环境,吞吐量收集器注重程序运行效率,适合多CPU环境。 38. **对象被垃圾回收条件**:无引用可达,且经过两次GC标记。 39. **Java 内存分配与回收策略**:...

    java面试经典题目

    6. **垃圾回收(GC)**:介绍不同类型的垃圾收集器,如Serial、Parallel、CMS、G1,以及新生代和老年代的概念。 7. **JVM调优**:理解内存结构(年轻代、老年代、元空间),如何通过JVM参数调整内存大小,以及如何...

    Java、面试题库,所有的题都在啊

    - **垃圾收集(GC)**:理解垃圾收集的工作原理,不同的垃圾收集器如Serial, Parallel, CMS, G1等。 - **内存区域**:堆,栈,方法区,本地方法栈,程序计数器的理解及其作用。 - **内存溢出**:分析OOM问题,...

    C#和JAVA的相同点和不同点_八个文档详细比较

    C# 也有GC(垃圾收集器),但还提供了显式内存管理(如using语句和unsafe代码块)以处理低级操作。 4. **类型系统**:C# 支持引用类型和值类型,其中值类型包括结构体和枚举,而Java只有引用类型和原始数据类型。C#...

    java面试题

    Bea JRockit JVM支持4种垃圾收集器: 46 63.5. 如何从JVM中获取信息来进行调整 46 63.6. Pdm系统JVM调整 47 63.6.1. 服务器:前提内存1G 单CPU 47 63.6.2. 客户机:通过在JNLP文件中设置参数来调整客户端JVM 47 64....

    2011各类型面试题汇

    - 堆内存结构:新生代、老年代、CMS、G1等垃圾收集器。 12. **框架应用:** - Spring框架:依赖注入(DI),AOP,事务管理。 - Spring Boot:自动配置,启动器,微服务架构。 - MyBatis:SQL映射,动态SQL,...

    java和.NET面试题

    2. **JVM(Java虚拟机)**:了解JVM的工作原理,包括类加载、内存模型(堆、栈、方法区等)、垃圾收集器以及性能优化策略。 3. **集合框架**:掌握ArrayList、LinkedList、HashMap、HashSet等集合类的使用,以及...

    IT大厂阿里Java面试问题及解答大全.rar

    1. 内存管理:深入分析垃圾回收机制,包括可达性分析、引用类型、垃圾收集器等。 2. 多线程:理解并发编程的基本概念,如线程池、锁、同步机制(synchronized、volatile、CAS)。 3. 高级集合框架:掌握ArrayList、...

    2021年Java大厂面试题整理大全

    1. 垃圾回收:理解不同垃圾收集器的工作机制,如Serial、Parallel、CMS、G1。 2. 内存模型:了解JVM的内存结构,包括堆、栈、方法区、本地方法栈等。 3. 类加载机制:理解双亲委派模型,以及自定义类加载器的实现。 ...

    java 面试题

    2. **内存管理**:Java的垃圾回收机制是面试常考点,包括垃圾收集器的工作原理、内存分代模型、对象的生命周期等。了解新生代、老年代的概念,如何避免内存泄漏,以及如何调优JVM参数。 3. **多线程**:Java的并发...

    对于java面试中常见的问题进行总结 .zip

    - **垃圾收集**:了解不同垃圾收集器的工作机制和调优策略。 - **类加载机制**:双亲委派模型和自定义类加载器的理解。 10. **框架知识** - **Spring框架**:包括依赖注入、AOP(面向切面编程)和Spring Boot的...

    【Java技术资料】-JAVA核心知识点整理

    - **垃圾回收**:理解GC机制,包括垃圾收集器的工作原理和调优策略。 3. **面向对象编程** - **构造器**:了解构造函数的作用,以及构造器重载。 - **接口与抽象类**:理解两者的异同,以及如何实现接口和扩展...

    2019年java面试题集锦

    - **垃圾收集**:分析不同垃圾收集器的工作机制,如Serial、ParNew、CMS等。 - **调优**:理解JVM参数设置,如-Xms、-Xmx、-XX:MaxHeapSize等。 8. **Spring框架**: - **依赖注入**:理解DI(Dependency ...

Global site tag (gtag.js) - Google Analytics