PerfMa 给 OpenJDK 社区提交的第一个 Patch

栏目: Java · 发布时间: 6年前

内容简介:前两天给openjdk gc-dev的email list提交了一个问题,主要是针对Full GC之后,GC日志里Metaspace的大小在GC前后都一直不变的问题,我在邮件里大概也提了下如何修复该问题,以及猜测了下为什么会有这个问题,内容比较简单,就不翻译啦,直接把邮件贴出来,PerfMa在后面会提交越来越多的patch给官方吧,虽然不一定每个patch都会被官方所接受,不过也希望为社区的发展贡献一份我们的力量。Hi, all

概述

前两天给openjdk gc-dev的email list提交了一个问题,主要是针对Full GC之后,GC日志里Metaspace的大小在GC前后都一直不变的问题,我在邮件里大概也提了下如何修复该问题,以及猜测了下为什么会有这个问题,内容比较简单,就不翻译啦,直接把邮件贴出来,PerfMa在后面会提交越来越多的patch给官方吧,虽然不一定每个patch都会被官方所接受,不过也希望为社区的发展贡献一份我们的力量。

PerfMa 给 OpenJDK 社区提交的第一个 Patch

邮件内容

Hi, all

We use metaspace instead of perm since JDK8, I found that after the Full GC, the size of the metaspace has always been the same from the GC log. I have looked at the source code of hotspot roughly. It has not bean fixed in the latest version. The problem which may have some impact on us to troubleshoot some metaspace problems.

I wrote a test case, and simply analyzed the hotspot code, and showed the output before and after the modification. I hope this problem can be fixed as soon as possible.

Demo:

PerfMa 给 OpenJDK 社区提交的第一个 Patch

My demo is very simple, just constantly create a new class loader to load a specific class, after loading, execute a System GC, so that we can see the relevant GC log output, the JVM parameters we run are

PerfMa 给 OpenJDK 社区提交的第一个 Patch

The GC log is

PerfMa 给 OpenJDK 社区提交的第一个 Patch

Let’s look at the source code of hotspot,

GenCollectedHeap::do_collection:

PerfMa 给 OpenJDK 社区提交的第一个 Patch

We see that metaspace’s gc log output is executed before ClassLoaderDataGraph::purge(); , that means the size of the metaspace is printed without reclaiming the memory of the metaspace, so the GC log seems no change before and after the GC metaspace.

After knowing the specific problem, we can make an adjustment to the code to move the logic of the output of metaspace size  after to ClassLoaderDataGraph::purge(),just like this:

PerfMa 给 OpenJDK 社区提交的第一个 Patch

At this point we recompile hotspot, execute the above demo again, you can see the correct output as follows

PerfMa 给 OpenJDK 社区提交的第一个 Patch

I also probably thought about why this problem is caused. This is the version before JDK8, such as JDK7, you can see the same code location:

PerfMa 给 OpenJDK 社区提交的第一个 Patch

It can be seen that the GC engineer at that time simply replaced print_perm_heap_change(perm_prev_used); with MetaspaceAux::print_metaspace_change(metadata_prev_used); but forgot the difference between Perm and Metaspace.

结语

大家也可以关注我们公司PerfMa的微信公众号,后面会给大家带来更多有意思有深度的技术文章。

PerfMa 给 OpenJDK 社区提交的第一个 Patch


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员面试手册

程序员面试手册

[印] 纳拉辛哈·卡鲁曼希(Narasimha Karumanchi) / 爱飞翔 / 机械工业出版社 / 2018-2-27 / 99

本书特色 以通俗易懂的方式讲述面试题,涵盖编程基础、架构设计、网络技术、数据库技术、数据结构及算法等主题 书中的题目来自微软、谷歌、亚马逊、雅虎、Oracle、Facebook等大公司的面试题,以及一些知名竞赛(如GATE)的考试题 全书约有700道算法题,每道题都有详细解答 针对每一编程问题,都会按照复杂度递减的顺序给出各种解法 专注于问题本身并对这些问题做出分析,......一起来看看 《程序员面试手册》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具