JVM学习
文章平均质量分 92
忧犹侑柚
自己的做出的决定就要坚持下去
展开
-
JVM学习笔记(一):JVM整体体系结构
前言 第一次写博客, 有点小激动。博客本意是为了整理自己学习的思路,建立知识体系,不像其他大佬的博客会对知识进行深入剖析。 我不想学了很多,最后都是知识碎片,别人一问起来某个概念,自己貌似知道一点,但是讲不清楚到底是个什么东西,细节知识倒是零零碎碎知道一些,这和没学感觉没差别。 ...原创 2019-05-27 19:13:23 · 209 阅读 · 0 评论 -
JVM学习笔记(六)-类加载过程
类加载总体流程先上图:类加载总体流程图 其中,大的步骤分为加载、连接、初始化、使用和卸载,连接包括验证、准备、解析。这里有一点需要注意的地方,图中各阶段的执行顺序问题。各阶段的执行顺序问题 图中只有加载、验证、准备、初始化是按部就班执行的,解析阶段不一定是按图中顺序执行。另外,前面所谓的按部就班,并不是严格地说上一阶段执行完了下个阶段才开始执行,也就是说阶段之间会有时间上的...原创 2019-06-12 19:00:51 · 163 阅读 · 0 评论 -
JVM学习笔记(三)-内存溢出
回顾 上一篇博客学习了JVM的运行时数据区域,分为程序计数器、虚拟机栈、本地方法栈、堆、方法区五个区域展开进行学习。重点介绍了虚拟机栈的栈帧结构,堆的对象创建、对象内存布局、对象的访问,运行时常量池和class文件常量池等知识点。在介绍各个区域的特点时,有一个词频繁提到,那就是OOM,除了程序计数器外,每个区域都有可能发生OOM,虚拟机栈和本地方法栈还有可能会发生stackoverflow e...原创 2019-06-06 16:40:05 · 357 阅读 · 0 评论 -
JVM学习笔记(七)-类加载器
回顾 上一篇博客复习了JVM的类加载过程,对加载、验证、准备、解析、初始化等各个阶段进行了详细内容的复习。但是,关于类加载,还有一块重要的知识——类加载器,它跟加载阶段、解析阶段等有着紧密的联系。 本篇博客将会对类加载器的分类、双亲委派模型以及打破双亲委派等方面进行复习。类加载器的分类 我们常把类加载器分为四类:启动类加载器(Bootstrap ClassLoader)扩展类加...原创 2019-06-13 13:09:38 · 116 阅读 · 0 评论 -
JVM学习笔记(四)-JVM的垃圾收集1
回顾 上一篇博客写了JVM的内存溢出问题,比较了内存溢出和内存泄漏的区别,然后对虚拟机栈的OOM和SOF、方法区和运行时常量池的OOM、堆的OOM做了相关实验验证,在实验过程中发现了java8对方法区perm gen的改进,即metaspace代替perm gen(java7将字符串常量池移入了堆中)。最后,对于使用stringbuilder造成的heap space的OOM的实验现象提出了两...原创 2019-06-07 19:39:21 · 136 阅读 · 0 评论 -
JVM学习笔记(二):JVM内存区域
回顾 上一篇博客讲到了JVM的定义,和JRE,JDK的区别。重点介绍了JVM的整体体系结构。包括class文件,类加载器,JVM内存区域,执行引擎,本地方法接口,垃圾收集器等部分,对JVM的知识体系有了一个总体的认识。 这篇博客主要介绍了JVM内存区域,对内存区域的划分、各部分的作用和特点以及内存溢出等相关知识。JVM内存区域总体划分 不多说,内存区域划分,也常叫运行时数据区域...原创 2019-06-03 22:03:54 · 275 阅读 · 0 评论 -
JVM学习笔记(八)-Java内存模型
总体架构内存模型图 之所以画成这样,是因为对《深入理解java虚拟机》中提到的内存模型中内存间的交互操作的理解,而不是简单的像书中的图一样。基于执行引擎和主内存的交互方式,以及read、load,store、write操作的含义,我个人认为应该加一个执行引擎和变量值暂存(有可能是寄存器、缓存等)。 如图所示,每个线程都会有自己的工作内存,在工作时,对共享变量的访问必须先从主内存...原创 2019-06-15 13:56:05 · 106 阅读 · 0 评论 -
JVM学习笔记(五)-JVM的垃圾收集2
回顾上一篇博客,学习了垃圾收集前的准备工作,包括对象存活判定算法、垃圾收集算法和JVM对以上算法的实现。本篇博客将接着上篇博客的内容,对JVM的垃圾收集相关知识进行进一步学习(由于之前一直用的学习这个词,现在就沿用了,其实这是第三遍复习,通过写博客找不足同时加深印象,后面将会用复习这个词了)。本篇博客首先学习几种垃圾收集器的特性和适用场景,然后会对java对象的内存分配策略和内存回收策略进行学...原创 2019-06-10 13:36:07 · 414 阅读 · 0 评论 -
JVM学习笔记(九)-从JVM看synchronized和Volatile
synchronized关键字 synchronized是一种非常传统的阻塞同步方式。用它加锁意味着多线程环境下,当多个线程需要进同步块时,会以串行的方式运行,即没有获得锁的线程会等到获取锁的线程执行完同步块,释放锁资源后才能竞争锁,得到锁后才能继续运行。但是到了JDK1.6进行优化后,就不是那么简单了。加锁和解锁synchronized可加三种锁:给普通方法加锁,锁住实例对象给静态...原创 2019-06-21 12:59:33 · 148 阅读 · 0 评论