[Java JVM] Hotspot GC研究- 开篇&对象内存布局

Hotspot简介

Hotspot是openjdk的JVM虚拟机, linux发行版下默认安装的是openjdk, 而oracle 的jdk也基本是由openjdk代码编译而来, 外加上一些商业代码, 形成orcale的jdk. 由此可见, hotspot的无处不在. 现在越来越多的应用构建在java之上, 大数据的很多项目, 如Hbase, Hive, flume等等, 都可运行在hotspot之上. 此外, Android的开发用的也是java, 虽然不是运行在hotspot之上, 底下也是JVM在支撑.

所以, hotspot JVM的研究价值无疑是巨大的. 而在使用hotspot众多问题之中, 又以gc问题最为广泛和突出, 遂萌生了研究hotspot GC的想法. 为了备忘和分享, 将研究过程中的点滴, 记录至博客.

按照openjdk官网的说法, hotspot是 “the best Java virtual machine on the planet

准备资料

学习计划

  1. 基础准备, 对象布局, 指针压缩, GC Root, GC安全点等
  2. Serial GC算法 - 单核小内存环境适合的算法
  3. Parallel GC算法 - 吞吐量型算法
  4. Garbage First算法(G1) - 低延时, 同时兼顾吞吐量, 适应大内存

至于Concurrent Mark Sweep算法, 见如下JEP(JDK Enhancement Proposal)

JEP 291: Deprecate the Concurrent Mark Sweep (CMS) Garbage Collector

Summary

Deprecate the Concurrent Mark Sweep (CMS) garbage collector, with the intent to stop supporting it in a future major release.

Goals

Accelerate the development of other garbage collectors in HotSpot.

Motivation

Dropping support for CMS and then removing the CMS code, or at least more thoroughly segregating it, will reduce the maintenance burden of the GC code base and accelerate new development. The G1 garbage collector is intended, in the long term, to be a replacement for most uses of CMS.

在JDK9中, G1将作为默认选项(之前是Parallel Scavenge), 并意图取代Low Pause类型的CMS收集器, 所以CMS只做大概了解.

研究环境

  • Ubuntu 15.10 64bit
  • Hotspot 64位默认参数下的行为

第一篇-对象内存布局


对象的metadata

内存的抽象就是一个线性空间内的字节数组, 通过下标来访问某一位置的数据. 熟悉C语言的同学对C式内存应该都不会陌生, 这些背景了解一点就好, 不了解也无伤大雅, 这里就不讨论C语言的细节了.

在C语言中, 动态分配一块内存通常是使用malloc函数, 形如:

//分配一块1024字节的内存
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值