java8默认垃圾收集器

OpenJDK 8具有几种垃圾收集器算法,例如Parallel GCCMSG1 。 哪一个最快? 如果默认GC从Java 8中的并行GC更改为Java 9中的G1(当前建议),将会发生什么? 让我们对其进行基准测试。

基准方法

  • 使用不同的VM参数运行相同的代码6次( -XX:+UseSerialGC-XX:+UseParallelGC-XX:+UseConcMarkSweepGC-XX:ParallelCMSThreads=2-XX:ParallelCMSThreads=4-XX:+UseG1GC ) 。
  • 每次运行大约需要55分钟。
  • 其他VM参数: -Xmx2048M -server
    OpenJDK版本: 1.8.0_51 (当前最新版本)
    软体: Linux version 4.0.4-301.fc22.x86_64 硬件: Intel® Core™ i7-4790 CPU @ 3.60GHz
  • 每次运行都能使用OptaPlanner解决13个计划问题。 每个计划问题要运行5分钟。 它以30秒的JVM预热开始,该预热将被丢弃。
  • 解决计划问题不涉及任何IO (启动期间要加载输入的几毫秒除外)。 一个CPU完全饱和。 它会不断创建许多短命的对象,然后GC会收集它们。
  • 基准衡量每毫秒可以计算的分数数量。 越高越好。 为提议的规划解决方案计算分数并非易事:涉及许多计算,包括检查每个实体与每个其他实体之间的冲突。

要在本地重现这些基准, 请从源代码构建optaplanner并运行主类GeneralOptaPlannerBenchmarkApp 。

基准结果

执行摘要

为了方便起见,我将每种垃圾收集器类型与Java 8(并行GC)中的默认类型进行了比较。

结果很明显: 该默认值(并行GC)是最快的。

原始基准数字

相对基准数字

Java 9是否应该默认为G1?

有建议使G1成为服务器的OpenJDK9中的默认垃圾收集器 。 我的第一React是拒绝这个提议

  • G1平均为17.60%
  • 对于每个数据集,在每个用例上,G1始终较慢。
  • 在最大数据集(Machine Reassignment B10)上,它使任何其他数据集的大小都34.07% ,, G1为34.07%较慢。
  • 如果开发人员机器和服务器之间的默认GC不同,则开发人员基准测试的可信度将降低。

另一方面,需要注意一些细微差别:

  • G1专注于限制GC暂停,而不是吞吐量。 对于这些用例(计算量很大),GC暂停长度基本上无关紧要。
  • 这是(几乎)单线程基准。 在并行或多线程求解中使用多个求解器进行进一步的基准测试可能会影响结果。
  • 建议使用G1的堆大小至少为6 GB 。 该基准测试仅使用了2 GB的堆大小,甚至只有最大的数据集(Machine Reassignment B10)才需要该大小。

繁琐的计算只是OpenJDK所使用的众多功能之一:在整个社区辩论中,它只是利益相关者中的一员。 如果其他利益相关者(例如Web服务)证明相反,则值得更改默认GC。 但是,请先向我展示真实项目的基准

结论

在Java 8中,默认的垃圾收集器(Parallel GC)通常是OptaPlanner用例的最佳选择。

翻译自: https://www.javacodegeeks.com/2015/08/what-is-the-fastest-garbage-collector-in-java-8.html

java8默认垃圾收集器

java8默认垃圾收集器_Java 8中最快的垃圾收集器是什么?相关推荐

  1. java9 g1垃圾收集器_Java 9中默认为G1垃圾收集器的情况

    java9 g1垃圾收集器 在前面的几篇文章中,我已经在InfoQ上介绍并讨论了"垃圾第一垃圾收集器" -G1:一个由所有垃圾收集器来统治它们以及调整垃圾第一垃圾收集器的技巧 . ...

  2. Java 8中最快的垃圾收集器是什么?

    OpenJDK 8具有几种垃圾收集器算法,例如Parallel GC , CMS和G1 . 哪一个最快? 如果默认的GC从Java 8中的并行GC更改为Java 9中的G1(当前建议),将会发生什么? ...

  3. java类加载器_java底层内功 第一章,类加载器的任性

    java类是怎么加载的? 类加载机制 JVM主要包含三大核心部分:类加载器,运行时数据区和执行引擎. 虚拟机将描述类的数据从class文件加载到内存,并对数据进行校验,准备,解析和初始化,最终就会形成 ...

  4. Tableau筛选器:仪表板中运用地图做筛选器

    在Tableau仪表板中,希望实现报表的联动,比如报表A以地图的形式展示各省/自治区的利润情况,报表B显示某个地区各类别产品的利润情况,希望点击A报表中的北京,B报表就显示北京各类别产品的利润情况.将 ...

  5. java 反复器_java集合类中的枚举器(反复器)

    在任何集合类中,必须通过某种方法在其中置入对象,再用另一种方法从中取得对象.毕竟,容纳各种各样的对象正是集合的首要任务.在Vector中,addElement()便是我们插入对象采用的方法,而elem ...

  6. java8 foreach 抛异常_Java Stream中的异常处理

    Exception Stream API和lambda是Java自版本8以来很大的一个特性.从那个时候开始,我们可以更多地使用函数式的语法.现在,在使用了这些语言特性一段时间之后,我们经常面临的一个问 ...

  7. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?

    长得像,但却是两个物种,不过可以让他们表现得近似. Python 的装饰器正如他的名称,很直白,就是实现了装饰器模式(的一个语法糖).@部分对应一个返回为函数的函数,可以对目标函数进行输入.输出过滤, ...

  8. java实现多媒体播放器_Java swing实现简单的视频多媒体播放器源码附带视频指导运行教程...

    <p> <span style="font-family:微软雅黑;font-size:19px;color:#666666;background-color:#FFFFF ...

  9. java课程设计-音乐播放器_Java程序设计课程设计报告音乐播放器

    Java程序设计课程设计报告音乐播放器 <Java及Java web应用开发>实验报告 设计题目: Java音乐播放器 专 业 计算机信息管理 班 级 1班 学 号 姓 名 2014年12 ...

最新文章

  1. php json josn_decode()返回的是对像,如何把对像转成数组
  2. TODO:Github的使用技巧之同步代码
  3. android屏幕分享软件,ScreenStream(屏幕分享)
  4. Leetcode1696. 跳跃游戏 VI[C++题解]:dp和单调队列求滑动窗口最值
  5. 查询分析器在哪里_你应该知道的3种Node.js分析器类型
  6. python lncrna_lncRNA分析
  7. antlr 可以用java写吗_java – 我们可以用ANTLR定义一个非上下文语法吗?
  8. STM32应用笔记转载
  9. 《Java从入门到放弃》框架入门篇:在MyEclipse中创建SpringBoot项目
  10. js中进行字符串替换的方法
  11. 计算机上有哪些操作系统?
  12. java转盘抽奖_JAVA用户抽奖系统设计(幸运大转盘作业)
  13. HEVC: I帧、P帧及B帧
  14. 自己动手写CPU——寄存器堆、数据存储器(基于FPGA与Verilog)
  15. Spring cloud config 配置文件加密
  16. python爬虫爬取公众号_Python selenium爬取微信公众号文章代码详解
  17. CSR867x — uart串口调试和AT指令
  18. Spring定时任务的Demo
  19. 工勤人员计算机考试内容,事业单位工勤人员计算机文字录入员考试大纲初级.doc...
  20. 【转】Thunderbird on Ubuntu 12.04 – 调整邮件列表行间距

热门文章

  1. jzoj4616-[NOI2016模拟7.12]二进制的世界【平衡规划,dp】
  2. P3690-[模板]Link Cut Tree(动态树)【Splay】
  3. nssl1323,jzoj(初中)2107-交流【dfs,容斥,组合数】
  4. 【2018.5.12】模拟赛之二-ssl2414 简写单词【字符串】
  5. ARC107——D - Number of Multisets
  6. 【SPFA】最优贸易(luogu 1073)
  7. 为什么说Java中只有值传递(另一种角度)
  8. 深入并发包-ConcurrentHashMap
  9. 什么是Spring Boot?
  10. JavaFX之TableView