聊聊JVM
文章平均质量分 89
这个专栏会聊聊和JVM有关的主题,技术点。网上有很多JVM的文章,争取能写出些新意,写出些新的点
iter_zc
关注互联网架构方向
展开
-
聊聊JVM(十)Mac下hsdis和jitwatch下载和使用
网上已经有了详细的hsdis和jitwatch的教材,比如这篇利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码hsdis能够查看Java生成的汇编代码,具体的可以查看上面这篇文章。这里提供一下Mac下的hsdis-amd64.dylib和hsdis-amd64.so文件的下载地址http://pan.baidu.com/s/1i3H原创 2014-12-12 17:50:08 · 7902 阅读 · 0 评论 -
聊聊JVM(九)理解进入safepoint时如何让Java线程全部阻塞
在这篇聊聊JVM(六)理解JVM的safepoint 中说了safepoint的基本概念,VM thread在进行GC前,必须要让所有的Java线程阻塞,从而stop the world,开始标记。JVM采用了主动式阻塞的方式,Java线程不是随时都可以进入阻塞,需要运行到特定的点,叫safepoint,在这些点的位置Java线程可以被全部阻塞,整个堆的状态是一个暂时稳定的状态,OopMap指出了原创 2014-12-12 13:05:53 · 21797 阅读 · 3 评论 -
聊聊JVM(八)说说GC标记阶段的一些事
这篇说说GC标记阶段的一些事情,尝试把一些概念说清楚。本人不是研究JVM实现的,如果表述有问题请查看参考资料进一步学习,推荐高级语言虚拟机圈子 ,里面有很多好的文章值得一看。GC最简单的理解就是先把live的对象标记出来,然后把没有标记到的对象清除掉。那么就有几个问题:1. 什么是活的对象?2. 如何标记3. 如何清除先简单说一下清除,清除的方法常见有三种:原创 2014-12-11 16:50:45 · 9486 阅读 · 4 评论 -
聊聊JVM(七)一张图说明JVM运行时状态
关于JVM运行时的内存分布有大量文章写过,没必要重复,在一个博客上看到下面这张图,很好地说清楚了JVM运行时内存各区域的细节,拿来引用一下。下图来自JVM Internals 这篇文章。里面总结了JVM基本的一些知识,很全面,值得看下。原创 2014-12-10 22:01:57 · 7285 阅读 · 1 评论 -
聊聊JVM(六)理解JVM的safepoint
safepoint是JVM里面很重要的一个概念,在很多场景下都会看到它,尤其是在GC的时候。这篇讲讲safepoint。本人不是做JVM实现研究的,很多地方只能点到为止,希望能够讲清楚这个概念,具体的细节可以自己去找资料深入研究。safepoint 安全点顾名思义是指一些特定的位置,当线程运行到这些位置时,线程的一些状态可以被确定(the thread's representation原创 2014-12-10 16:32:42 · 21726 阅读 · 12 评论 -
聊聊JVM(五)从JVM角度理解线程
这篇说说如何从JVM的角度来理解线程,可以对Java的线程模型有一个更加深入的理解,对GC的一些细节也会理解地更加深刻。本文基于HotSpot的OpenJDK7实现。我们知道JVM主要是用C++实现的,JVM定义的Thread的类继承结构如下:Class hierarchy - Thread - NamedThread - VMThread -原创 2014-12-10 11:01:08 · 17473 阅读 · 7 评论 -
聊聊JVM(四)深入理解Major GC, Full GC, CMS
很多人都分不清Major GC, Full GC的概念,事实上我查了下资料,也没有查到非常精确的Major GC和Full GC的概念定义。分不清这两个概念可能就会对这个问题疑惑:Full GC会引起Minor GC吗?经过一系列的查找和对JVM表现的分析,基本可以给Full GC和Major GC下一个定义了,这篇说一说概念和理由。这篇文章Major GCs – Separati原创 2014-12-09 16:20:43 · 43314 阅读 · 9 评论 -
聊聊JVM(三)两种计算Java对象大小的方法
这篇说说如何计算Java对象大小的方法。之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示 这篇中已经说了Java对象的内存表示模型是Oop-Klass模型。普通对象的结构如下,按64位机器的长度计算1. 对象头(_mark), 8个字节2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节3. 数据区4.Padding(内存对齐),按照8的倍数原创 2014-12-09 13:21:06 · 32984 阅读 · 13 评论 -
聊聊JVM(二)说说GC的一些常见概念
上一篇总结GC的基础算法,各种GC收集器的基本原理,还是比较粗粒度的概念。这篇会整理一些GC的常见概念,理解了这些概念,相信对GC有更加深入的理解1. 什么时候会触发Minor GC? Eden区域满了,或者新创建的对象大小 > Eden所剩空间 CMS设置了CMSScavengeBeforeRemark参数,这样在CMS的Remark之前会先做一次Minor GC原创 2014-12-08 13:04:12 · 16034 阅读 · 8 评论 -
聊聊JVM(一)相对全面的GC总结
最近时间比较紧张,要写的东西也有很多,只能想到一点写一点。关于GC,网上的资料太多,之前对一个系统调优的时候又回顾了一下,找了几篇广泛流传的资料,大部分都是大同小异,这里总个总结,希望能够做个相对的全集,并写出一些新的点,比如Card Marking(卡片标记)等。首先是大家都要提到的GC的基础算法:标记清除,标记整理,复制,分代。这些算法的第一步都是做的一件事: 标记(Mark)。原创 2014-12-05 13:08:20 · 19663 阅读 · 12 评论