jvm
刘二郎
很懒
展开
-
读 - 深入理解java虚拟机 - 笔记(三) - java内存模型与线程(12章)-java内存模型和规则(繁琐解释)
上一篇去研究了下处理器内的内存和缓存之间数据的一致性保证,了解到的内容还是很浅的,不着急,慢慢来,以后会继续深入的。基于此,今天来看看java的虚拟机内的内存模型,其实是可以类比处理器的内存模型,理解起来不难。java内存模型,术语称之为(java Memory Model JMM)。它的主要目标是定义程序中各个变量的的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这种底层细节。翻译 2017-08-03 21:20:43 · 309 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(八-2) - Java内存分析工具(2章)
JDK提供给我们很多小工具,可供我们使用去分析当前内存的一些数据。jps(JVM Process Status)可以列出正在运行的虚拟机进程,以及主类名称和唯一ID。public class TestOom { public static void main(final String[] args) throws Exception { while (true){ ...原创 2018-06-19 10:54:12 · 134 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(八-1) - Java内存溢出异常(2章)
Java堆溢出堆内存储对象实例,因此只要不断创建对象,并且保证GC Roots到对象之间有可达路径以免垃圾回收机制清除对象。/** * @author: wayne * @desc: * @date: 2018/5/10 14:47 * @version: 1.0 * -Xms20M * -Xmx20M * -Xmn10M * -XX:+HeapDumpOnOutO...翻译 2018-06-14 15:41:13 · 178 阅读 · 0 评论 -
JVM相关知识点
JVM知识点很多也很杂也很深也很抽象,但是基础知识点需要清除而且清晰,总体思路不能乱,这样才能循序渐进。1. JVM内存区域模型这边要说下,内存区域模型和内存模型有区别的。内存区域模型就是大家一般说的堆区,方法区什么的,内存模型指的是Java内存模型,是指主内存,工作内存方面的。内存区域模型简单概括下:线程私有区域:程序计数器(当前线程执行的字节码的行号指示器),栈(生命周期和线程相同,存储局部变...原创 2018-06-13 16:52:10 · 113 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(七-2) - Java内存区域(2章)-对象的内存布局和访问定位
对象的内存布局Java普通对象被创建出以后,就需要关注下它在JVM堆中的内存布局是什么样子的。大致分为3个区域:1.对象头(Header)2.实例数据(Instance)3.对齐补充(Padding)1.对象头(Header)对象头在JVM这本书中有个专门的章节去讲Class文件的布局,这一章还没有去看,因此,对于这个暂时没有什么概念。主要分为2部分翻译 2017-12-07 17:01:50 · 249 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(七-1) - Java内存区域(2章)-对象创建
是的翻译 2017-12-07 15:47:53 · 167 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(一) - java内存区域模型(2章)
使用java也有好几年了,记得大学时是在听老师讲,觉得好像没多少东西啊,工作第一年并没有找到java岗位,而是做cobol去了,估计知道cobol的人少之又少吧。的确,这个语言真是太古老了,而且做这个最痛苦的是,很多资料都是企业内部资料,外面能找到的寥寥无几。干了一年,更多的时候都是在发邮件,扯皮,解决bug。银行的系统追求的是稳定而不是创新,做的很憋屈,又想重新回到java岗位上,但是简历投原创 2017-06-10 08:45:10 · 378 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(六-4) - 垃圾收集器和内存分配策略(3章)-内存分配
Java所提倡的自动内存管理可以自动化解决两个问题:1.给对象分配内存。2.回收分配给对象的内存。关于内存的回收,上一篇已经讲过了,这一篇讲一讲内存的分配。1.对象优先在Eden分配。大多数情况下,对象在新生代Eden中分配(关于Eden区,上一篇已经大致介绍了),当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。这边所说的对象是指一个个小对象,不是指大翻译 2017-12-06 10:42:56 · 228 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(六-3) - 垃圾收集器和内存分配策略(3章)-垃圾收集器
有关垃圾收集器的文章,我纯粹也是翻译,因为自己没有这方面经验,说实话,做项目到今天,都没有遇到垃圾回收的问题,因为自身从事的项目数据量不大,难以接触这种问题,手动模拟呢,又不会有真正的问题现场那么令人欢欣,大致上现在有的收集器一般如下图:针对每个收集器我先做个简单的归类统计:这里对于并行和并发的就不去做过多解释了。1.Serial收集器最基本,最稳定高效的垃圾收集器翻译 2017-12-01 17:11:05 · 225 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(六-2) - 垃圾收集器和内存分配策略(3章)-垃圾回收算法
深入了解虚拟机这本书也强调了,每个平台操作内存的方式不同,因此垃圾回收的程序细节不考虑,只讨论算法的思想。1.标记清除算法最基础的收集算法是“标记-清除”算法,算法分为“标记”-“清除”两个阶段,之所以说它时基础的,因为后续的算法都是基于此,对其进行改进获得的。首先需要标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象,标记过程就是上一篇看见的对象的标记。它主要存在两个不翻译 2017-11-30 14:51:43 · 200 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(六-1) - 垃圾收集器和内存分配策略(3章)-对象已死吗
虚拟机这本书我还只能停留在翻译的边缘,没有能力去结合实际工作经验分享自己的体会,因为自身的编程工作仍然是业务驱动,并且也没有很大的并发量,这是致命的,自己根本碰不到需要深入了解虚拟机去解决问题的程度,也是很想去接触这种项目,但是高大上的公司又没有机会,只能是读书去了解知识了。判断对象是否已死。主要有两种判断方法。1.引用计数法基本思想:给对象中添加一个引用计数器,每当有一个地方引用它时翻译 2017-11-29 20:27:54 · 163 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(五-2) - 虚拟机类加载机制(7章)-类加载器
关于类加载器,需要先说明一下一个知识点。对于每一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,因此比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它的类加载器不同,那这两个类必定不相等。这边设计到相等得我概念,有必要驻足研究一下额外的东西~~~~翻译 2017-11-20 14:36:39 · 338 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(五-1) - 虚拟机类加载机制(7章)-类加载时机
其实在这篇之前,笔者已经大致研究过虚拟机的类加载机制了,但是不是纯粹读书做的笔记,而是研究的是java的静态变量时读过一次,这一次读书,就是为了再次回顾知识点,加深印象。java静态变量首先说到类加载,就需要立即知道三个大步骤:加载,链接,初始化。不过细分之下有以下几点。1.加载,2.链接,链接阶段有细分为:验证,准备,解析3.初始化,4.使用,5.卸载,翻译 2017-11-15 14:36:43 · 195 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(四) - java内存模型与线程(12章)-java内存模型和规则(简单解释)
上一篇的解释是繁琐的不行,连虚拟机这本书的作者也是如此的说。但是在这一节会用些简单的描述来定义这些规则。这就是java语言内的一个原则“先行发生”的原则(happens-before)原则,这个原则是判断数据是否存在竞争,线程是否安全的主要依据。靠这个原则可以通过几条规则解决并发环境下两个操作之间是否可能存在竞争。先行发生原则是java内存模型中定义的两项操作之间的偏序关系,也就是如果A翻译 2017-08-08 22:14:54 · 229 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(二) - java内存模型与线程(12章)-处理器的内存模型
首先,看到这一张的内容时看见了一个协议,MESI协议,这个协议涉及到处理器的内存与缓存相关的知识,因此就先去了解了一下处理器的知识,java虚拟机的模型其实和处理器可以类比,看看没有坏处。百度了大段的博客,发现大家写的都是参考的一本书,《大话处理器》,也去下载了一本,其他内容没兴趣,直接去第5张找有关缓存的知识。。。。一.Cache的层次书中提到,现今的处理器都是采用的多级的Cache翻译 2017-08-02 16:50:59 · 258 阅读 · 0 评论 -
读 - 深入理解java虚拟机 - 笔记(九 - java内存区域模型-方法区的更新(2章)
在最开始的JVM学习关于JVM内存区域模型时,我们知道了JVM内存有几个区域,有些线程共享,有些线程独有。JVM内存区域模型在上面链接中的方法区,我们基本都是认为这就是持久代,线程共享的区域。JDK1.6之前:存放了加载的类信息,常量池,静态变量,即时编译的代码JDK1.7:常量池移到堆中。JDK1.8-now:持久代被废除,取而代之的是Metaspace。移除的动机关于移除的动机我去百度了一圈,...原创 2018-06-20 10:51:44 · 506 阅读 · 0 评论