JVM技术周报 · 第1期

JVM技术每周分享整理了JVM技术交流群每周讨论的内容,由群内成员整理归纳而成。如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,获取入群详情。

SafePoint

safePoint是代码的特殊位置.发生GC时,jvm要判断引用关系,引用关系存在OopMap中,不可能每跑一行代码就生成一个OopMap,这会消耗大量的CPU执行时间和内存,所以jvm会在一些特殊的位置生成OopMap,这些位置就是SafePoint.GC时,jvm发出线程中断请求,线程只有跑到SafePoint才会中断,所以SafePoint不能太少.

线程中断主要有两个方式:抢先式中断 线程收到中断请求时,判断在不在safepoint,不在恢复run到safepoint(很少使用) 主动式中断 线程run的时候轮询中断标志,中断标志为真则处于safepoint.

SafeRegion

当线程正在run的时候,可以响应jvm的中断请求,跑到SafePoint中断.但是线程处于wait,blocked,sleep状态时,是无法跑到SafePoint中断的.同时这些线程不处于run的状态,引用关系不会发生变化.于是jvm规定了SafeRegion,无论何时发起GC,处于SafeRegion的线程都是安全的可以直接进行GC的.线程离开SafeRegion会检查系统是否已经完成了gc,完成可以离开去run,未完成继续等待可以离开的信号.

CMS内存碎片

CMS (Concurrent Mark Sweep)是一种以获取最短回收停顿时间为目标的Tenured generation收集器.CMS采取的是标记清清除算法.该算法是一定会产生内存碎片的,这是无法避免的.致过多的内存碎片会导致给大对象分配内存时,没有足够大的连续内存而出发full GC.
于是CMS提供了两个参数去解决这个问题:

-XX:UseCMSCompactAtFullCollection默认开启,fullGC时将老年代缩压缩.

-XX:CMSFullGCsBeforeCompaction 则是代表多少次FGC后对老年代做压缩操作,默认值为0,代表每次都压缩, 把对象移动到内存的最左边,可能会影响性能,但是可以消除碎片. 即牺牲一定性能在每次GC之后,将存活的对象整理到一块,消除内存碎片.

parNew+CMS组合 eden的YGC辨别对象的状态

问题中有个缺陷,当触发MinorGC时不仅仅是eden区,还会扫描from Survivor 区的内存.
ParNew采取的算法是复制清除算法,但是判断对象是否存活仍是可达性算法,采取对对象进行标记判断状态.

常量池

  • 常量池主要分为两个:
    静态常量池: *.class的常量池,保存了一些类的描述信息(符号引用-->1.类和方法的全限定名 2.字段的名称和描述符 3.方法的名称和描述符),以及一些字面量(1.文本字符串 2.八种基本类型的值 3.被声明为final的常量等)

  • 动态常量池: jvm在加载某个类的时候,必须经过装载、连接、初始化,而连接又包括验证、准备、解析三个阶段。而当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,由此可知,运行时常量池也是每个类都有一个.

全局字符串常量池:本质是一个HashSet,这是一个纯运行时的结构,而且是惰性维护的。注意它只存储String对象的引用,而不存储String对象的内容,根据这个引用可以得到具体的String对象。这个常量池在每个HotSpot VM的实例只有一份,被所有的类共享, JDK6 之前是存放在方法区,JDK7被移到了堆区中.(这里有很多有意思的点课自行百度)

JVM技术周报第1期相关推荐

  1. JVM技术周报第2期

    JVM技术周报第2期 JVM技术周报分享JVM技术交流群的讨论内容,由群内成员整理归纳而成.如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,获取入群详情. ...

  2. 大数据技术周报第 005 期

    这里记录过去一周,大数据相关值得分享的东西,每周发布. 今天尝试写第四期,记录过去一周一点所见所闻. 文章目录 技术一瞥 文章 资源 订阅 技术一瞥 1.什么是ETL? 引用:https://en.w ...

  3. 大数据技术周报第 009 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 这是第 9 期分享,记录过去一周关于大数据的见闻,保证信息的质量和溯源. 文章目录 技术一瞥 文章 资源 订阅 技术一瞥 1.Kafka 最近 ...

  4. 大数据技术周报第 007 期

    这里记录过去一周,大数据相关值得分享的东西,每周发布. 今天尝试写第 7 期,记录过去一周一点所见所闻. 文章目录 技术一瞥 图片 文章 资源 订阅 本期主题:实时数仓 技术一瞥 做实时数仓经历了什么 ...

  5. 大数据技术周报第 006 期

    这里记录过去一周,大数据相关值得分享的东西,每周发布. 今天尝试写第 6 期,记录过去一周一点所见所闻.假期玩(。・∀・)ノ゙嗨了. 文章目录 技术一瞥 图片 文章 资源 订阅 技术一瞥 1.hdfs ...

  6. 大数据技术周报第 004 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 今天尝试写第 4 期,记录过去一周一点所见所闻. 文章目录 图片 文章 资源 订阅 图片 文章 1.Flink 1.9 发布,有你期待的功能吗 ...

  7. 大数据技术周报第 003 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 今天尝试写第三期,记录过去一周一点所见所闻.上周好像忘记发了?是的- 文章目录 技术一瞥 图片 文章 资源 视频 订阅 技术一瞥 1.Kafk ...

  8. 大数据技术周报第 001 期

    这里记录过去一周,大数据相关值得分享的东西,每周日发布. 今天尝试写第一期,记录过去一周一点所见所闻. 文章目录 最佳 技术一瞥 图片 文章 资源 订阅 最佳 1.TDengine TDengine是 ...

  9. 物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用

    新闻 \\ \\t <Ubuntu 16.04 LTS 已在英特尔 NUC 和物联网主板上获得认证>在全球拥有数百万用户的热门GNU/Linux发行版本--Ubuntu的背后公司Canon ...

最新文章

  1. Redis、MongoDB、Memcache的比较
  2. ThreadGroup
  3. Java程序员从笨鸟到菜鸟之(十一)多线程讲解
  4. saltstack批量修改root密码
  5. lambda的用法与实例(转载)
  6. 学习 Message(3): 响应 WM_LBUTTONDOWN 消息
  7. HttpClinet学习笔记
  8. 视觉SLAM——ceres非线性最小二乘求解器
  9. WDLINUX (Centos5.8) 安装 bcmath
  10. 20145335郝昊《网络对抗》逆向及Bof基础实践
  11. java线程池原理简答_面试官让我讲讲Java线程池的实现原理,我笑了...
  12. pytorch多gpu并行训练
  13. Linux shell (一)
  14. Python命令行参数选择
  15. B 罗马数字 2018浙江理工大学新生赛
  16. java培训老师面试题_千锋Java培训老师分享Java实习生面试题
  17. 利用node爬取王者荣耀英雄信息,并存入数据库
  18. JS每晚24:00更新某方法
  19. 区块链的硬分叉和软分叉
  20. 多linux系统的安装方法,在Linux系统中安装使用WPS的方法

热门文章

  1. Alphabet高管:移动搜索为收入主要增长点 广告形式改进长期获益
  2. 贵州出台首部大数据地方法规 数据开放引入负面清单
  3. 保护 ASP.NET 应用程序的安全
  4. 第三方组件曝多个严重漏洞,飞利浦 Vue PACS 医学成像系统受影响
  5. 详细分析 Chrome V8 JIT 漏洞 CVE-2021-21220
  6. 2020 Pwn2Own东京大赛落幕,Master of Pwn 诞生
  7. MongoDB 主从架构
  8. 2016打算做运维的人员必知必晓的知识
  9. RHEL7.0时间同步设置
  10. 10.2 广州集训 Day1