JVM
文章平均质量分 88
Java技术博文
这个作者很懒,什么都没留下…
展开
-
JVM系列(1)-Java内存区域
前段时间比较忙,公众号断更了一段时间,当下得空,准备写个JVM系列,JVM也就是Java Virtual Machine(Java虚拟机的缩写)。考虑或者定位的问题的时候,经常会思考下数据的流向,那JVM是在哪个位置,哪个闸口呢?问题1: JVM的位置JVM在Java App和操作系统之间。Java语言不需要我们手工的释放或回收内存,这个工作由J原创 2017-12-26 21:53:46 · 263 阅读 · 0 评论 -
JVM系列(2)-对象和OOM异常
上一讲中,我们了解了JVM的内部结构,更准确的讲应该是JVM运行时数据区,知道了对象的实例是在堆中分配的。那到底是怎么创建的,都有哪些信息需要创建,我们今天就先讲下这个,以Hotspot实现为例。问题1:对象是怎么创建的?我们创建对象的时候,会使用new关键字,像这样:Object obj = new Object();虚拟机在遇到new这个关键字的原创 2017-12-27 21:40:44 · 283 阅读 · 0 评论 -
JVM系列(4)-垃圾收集算法
上一节讲了判断"垃圾"的方法,有引用计数和可达性分析两种方法。这一节看下,回收这些“垃圾”的方法。方法1:标记-清除算法见名知意,先标记,再清除;标记出所有的可回收对象后,统一回收。缺点:容易产生大量的内存碎片,如果分配的对象占用内存较大,同时又找不到足够大的连续空间,则只能再次触发一次垃圾回收。回收前:回收后:原创 2018-01-03 22:34:52 · 271 阅读 · 0 评论 -
JVM系列(3)-哪些内存需要回收?
今天看看垃圾收集和内存分配策略。垃圾收集无非就是清除垃圾,释放内存,而JVM就像一个大管家,不需要你这位当家的介入,他把垃圾清理这个活给揽下了,你只需要创建对象,生产垃圾,JVM这位大管家来打扫。前面讲了JVM的运行时数据区,这些区域啊,也就相当于你这位当家的四合院。有院子,有单间。院子是公共区域(堆+方法区),单间是私有区域,每个单间都有(虚拟机栈+本地方法栈+程序计数器)这些标配。差点原创 2017-12-28 22:48:15 · 1472 阅读 · 1 评论 -
JVM系列(5)-HotSpot 1
问题1:HotSpot是什么东东?JVM制定了一个规范,不同的公司或者个人可以根据规范实现自己的Java虚拟机。为了便于理解可以将规范理解为接口,接口可以简化理解为一个方法,定义应该具有哪些功能。例如swap(a,b) 意思就是交换a和b的值。至于方法的实现不关心,最终能把a,b值交换过来就成,这就是规范。不管黑猫还是白猫,能逮着老鼠就行。Hot原创 2018-01-05 23:21:45 · 360 阅读 · 0 评论 -
JVM系列(6)-内存分配与回收策略
今天聊聊Java的内存分配和内存回收,内存的回收也就是前几节讲的垃圾回收,有兴趣的可以看下前面的文章,今天主要看下内存的分配。先来回忆下Java运行时的数据区,如下图所示。Java对象所占的内存是在下面哪个区上分配的?堆,恭喜你答对了^_^。回忆点1:堆的内存布局我们在讲垃圾收集算法的时候,有提到过分代收集算法(JVM系列(4)-垃圾收集算法)。也就是按对象的生存时间将其划分为新生代和老年代,不同原创 2018-01-17 23:06:44 · 320 阅读 · 0 评论 -
JVM系列(5)-HotSpot 2 垃圾收集器
今天继续HotSpot的学习,聊聊垃圾收集器。之前讲过垃圾收集算法,可以参考这里JVM系列(4)-垃圾收集算法,垃圾收集算法讲的是思想或者理论,垃圾收集器呢,就是其实现。知识点1:HotSpot有哪些垃圾收集器呢?参阅《深入理解Java虚拟机 JVM高级特性与最佳实践》,以JDK 1.7 Upgrade 14之后的HotSpot虚拟机为例原创 2018-01-09 16:45:31 · 319 阅读 · 0 评论 -
JVM系列(7)-JVM类加载机制(1)
我们编写的*.java文件,编译后会生成*.class文件。*.class最终都是要加载到虚拟机中之后才能运行和使用,那虚拟机是怎么加载这些文件的呢?今天我们就来聊聊这个。先来看下类的生命周期,主要包括以下几个阶段:加载、验证、准备、解析、初始化、使用、卸载。除了解析阶段位置不固定,其余的阶段开始顺序都是固定的。在某些情况下,解析阶段可在初始化之后。下面逐一讲解各个阶段。阶段1:加载类加载的过程包...原创 2018-03-12 22:56:04 · 296 阅读 · 0 评论 -
JVM系列(7)-JVM类加载机制(2)
今天继续类加载的学习,先复习下类的生命周期。上一篇讲到了阶段2-验证JVM系列(7)-JVM类加载机制(1),今天从阶段3开始。阶段3:准备准备阶段都做什么呢?主要做两件事情:1)为类变量分配内存什么是类变量?也就是用static修饰的变量;在哪个区域上分配?在方法区上分配,记住是方法区而不是堆。2)设置类变量初始值比如public static int value = 111;设置变量初始值,是...原创 2018-03-13 22:52:49 · 266 阅读 · 0 评论