细述 Java垃圾回收机制→Types of Java Garbage Collectors
本文将会介绍各种不同类型的Java垃圾回收器。垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程。
Java有四种类型的垃圾回收器,
Serial Garbage Collector Parallel Garbage Collector CMS Garbage Collector G1 Garbage Collector这四种类型的垃圾回收器都有各自的优点和缺点。最重要的是程序员可以选择JVM使用哪种类型的垃圾回收器。我们可以通过传递不同的JVM参数来设置使用哪一个。各个垃圾回收器在不同应用场景下的效率会有很大的差异。因此了解各种不同类型的垃圾回收器以及它们的应用场景是非常重要的。
Serial Garbage Collector
串行垃圾回收器控制所有的应用线程。它是为单线程场景设计的,只使用一个线程来执行垃圾回收工作。它暂停所有应用线程来执行垃圾回收工作的方式不适用于服务器的应用环境。它最适用的是简单的命令行程序。
使用-XX:+UseSerialGCJVM参数来开启使用串行垃圾回收器。
Parallel Garbage Collector
并行垃圾回收器也称作基于吞吐量的回收器。它是JVM的默认垃圾回收器。与Serial不同的是,它使用多个线程来执行垃圾回收工作。和Serial回收器一样,它在执行垃圾回收工作是也需要暂停所有应用线程。
CMS Garbage Collector
并发标记清除(Concurrent Mark Sweep,CMS)垃圾回收器,使用多个线程来扫描堆内存并标记可被清除的对象,然后清除标记的对象。CMS垃圾回收器只在下面这两种情形下暂停工作线程,
在老年代中标记引用对象的时候 在做垃圾回收的过程中堆内存中有变化发生对比与并行垃圾回收器,CMS回收器使用更多的CPU来保证更高的吞吐量。如果我们可以有更多的CPU用来提升性能,那么CMS垃圾回收器是比并行回收器更好的选择。
使用-XX:+UseParNewGCJVM参数来开启使用CMS垃圾回收器。
G1 Garbage Collector
G1垃圾回收器应用于大的堆内存空间。它将堆内存空间划分为不同的区域,对各个区域并行地做回收工作。G1在回收内存空间后还立即堆空闲空间做整合工作以减少碎片。CMS却是在全部停止(stop the world,STW)时执行内存整合工作。对于不同的区域G1根据垃圾的数量决定优先级。
使用-XX:UseG1GCJVM参数来开启使用G1垃圾回收器。
Java 8 的优化
在使用G1垃圾回收器是,开启使用-XX:+UseStringDeduplacatonJVM参数。它会通过把重复的String值移动到同一个char[]数组来优化堆内存占用。这是Java 8 u 20引入的选项。
以上给出的四个Java垃圾回收器,在什么时候使用哪一个去决于应用场景,硬件配置和吞吐量要求。
Garbage Collection JVM Options
下面是些主要的与Java垃圾回收相关的JVM选项。
Type of Garbage Collector to run
GC 优化选项
Example Usage of JVM GC Options
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar
作者:anonymoussf
来源:51CTO
看山聊Java:一文掌握 Java8 Stream 中 Collectors 的 24 个操作 Java8 应该算是业界主版本了,版本中重要性很高的一个更新是Stream流处理。关于流处理内容比较多,本文主要是说一下Stream中的Collectors工具类的使用。
Java 8 Stream 的终极技巧——Collectors 操作 1. 前言 昨天在 Collection移除元素操作 相关的文章中提到了 Collectors 。相信很多同学对这个比较感兴趣,那我们今天就来研究一下 Collectors 。 2. Collectors 的作用 Collectors 是 Java 8 加入的操作类,位于 java.util.stream 包下。它会根据不同的策略将元素收集归纳起来,比如最简单常用的是将元素装入Map、Set、List 等可变容器中。特别对于 Java 8 Stream Api 来说非常有用。它提供了collect() 方法来对 Stream 流进行终结操作派生出基于各种策略的结果集。我们就借助于 Strea
相关文章
- [转]JAVA的动态代理机制及Spring的实现方式
- Java反射机制剖析(二)-功能以及举例
- Java并发编程(07):Fork/Join框架机制详解
- Java并发编程(06):Lock机制下API用法详解
- Java并发编程(05):悲观锁和乐观锁机制
- Java并发编程(02):线程核心机制,基础概念扩展
- Java -- 异常的捕获及处理 -- Java的异常处理机制
- java.lang.Class<T> -- 反射机制
- Java 中有哪些无锁技术来解决并发问题?如何使用?
- java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得
- CSDN日报191016:Java纯干货分享:史上最全的JAVA工程师面试题汇总
- Exception in thread “main“ java.lang.NoClassDefFoundError: freemarker/template/Configuration
- 运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
- 《Java遗传算法编程》—— 1.5 生物进化
- java 实现 DES加密 解密算法
- Java为什么会流行
- java 反射实现框架功能
- The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
- 【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
- Java集合框架和泛型机制
- 【转】Java异常总结和Spring事务处理异常机制浅析
- Java基础篇:回调机制详解
- 反射机制之Java 反射机制概述
- java的动态代理机制详解
- Java 完全数
- Java 反射机制学习资料
- Java的SPI机制与简单的示例
- 最新版MacOS系统轻松配置基础依赖库、环境变量、Java、Python、NodeJS等开发环境
- java垃圾回收机制概括