
JVM
文章平均质量分 90
我就是马云飞
欢迎来到马云飞的博客,寂寞如风一般的少年。正朝着大牛的方向前行。希望我的博客可以帮助你们向大牛的方向前进。我不信神,但我通过巨人的肩膀凝视神所在的方向。
展开
-
JVM系列之GC回收机制
为什么需要GC? 如果不进行垃圾回收,内存耗空是迟早的。因为我们在不断的进行内存分配,而不进行垃圾回收。除非内存足够大,可以让我们随意分配内存。但事实并非如此。 什么是垃圾? 所谓垃圾就是指内存中已经没用的对象。那么我们如何找到这些没用的对象。JVM中使用一种叫做可行性分析的算法来决定对象是否要被回收。 可行性分析 这个算法的思想是通过一系列称为“GCRoot”的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GCRoot没有任何引用链(即GCRoots到对象不可达)时,则证明此原创 2021-01-28 11:17:28 · 1188 阅读 · 2 评论 -
JVM系列之Class初始化过程
概述 一个 class 文件被加载到内存中需要经过三大步:装载、链接、初始化。其中链接又可以细分为:验证、准备、解析三小步。如图所示: 装载 装载是指JVM找到class文件生成字节流,然后根据字节流创建java.lang.Class对象的过程。 过程如下: ClassLoader通过一个类的包名+类型来查找.class文件。并生成二进制字节流。 把class文件解析为JVM内部的数据结构,并存储在方法区。(这种解析类似json文件解析成运行时的bean类) 在内存中创建一个java.lang原创 2021-01-28 11:04:57 · 1001 阅读 · 1 评论 -
JVM系列之JMM内存模型
java内存划分 JMM规定了内存主要划分为主内存和工作内存两种。此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在不同的层次上进行的,如果非要对应起来,主内存对应的是Java堆中的对象实例部分,工作内存对应的是栈中的部分区域,从更底层的来说,主内存对应的是硬件的物理内存,工作内存对应的是寄存器和高速缓存。具体如图所示: 正常情况下,java中所有的数据都是放在主存中的,如图所示: 随着 CPU 技术的发展,CPU的执行速度越来越快,但内存的技术并没有太大的变化,如果JAVA线程每次读取和写入原创 2021-01-28 10:52:27 · 348 阅读 · 0 评论 -
JVM系列之程序运行时,内存是如何分配的?
Jvm中的内存划分 JVM 中的内存可以划分为若干个不同的数据区域,主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区。 程序计数器 java本身是多线程的,当某一线程被CPU挂起后,需要记录程序执行的位置,这个时候就需要用到程序计数器。方便CPU重新执行此线程时,知道从哪行指令开始执行。这就是程序计数器的作用。 注意: 1、在JVM中,对于程序计数器没有规定任何OutOfMemoryError的情况。 2、线程私有的,每条线程内部都有一个私有程序计数器。它的生命周期随着线程的创建而创建,随着线程的结束原创 2021-01-28 10:37:11 · 279 阅读 · 0 评论