JVM
文章平均质量分 92
a1405
这个作者很懒,什么都没留下…
展开
-
从 CPU 说起,深入理解 Java 内存模型!
Java 内存模型,许多人会错误地理解成 JVM 的内存模型。但实际上,这两者是完全不同的东西。Java 内存模型定义了 Java 语言如何与内存进行交互,具体地说是 Java 语言运行时的变量,如何与我们的硬件内存进行交互的。而 JVM 内存模型,指的是 JVM 内存是如何划分的。Java 内存模型是并发编程的基础,只有对 Java 内存模型理解较为透彻,我们才能避免一些错误地理解。Java 中一些高级的特性,也建立在 Java 内存模型的基础上,例如:volatile 关键字。为了让大家能明白 Java转载 2022-07-12 10:39:18 · 125 阅读 · 0 评论 -
JVM 内存布局
概览内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略 ,保证了 JVM 的高效稳定运行。上图描述了当前比较经典的JVM内存布局。如果按照线程是否共享来分类的话,如下图所示:PS:线程是否共享这点,实际上理解了每块区域的实际用处之后,就很自然而然的就记住了。不需要死记硬背。下面让我们来了解下各个区域。一、Heap (堆区)1.1 堆区的介绍我们先来说转载 2022-01-12 17:50:19 · 172 阅读 · 0 评论 -
一张图看懂JVM之类装载系统
一、JVM类装载概述Java类的加载、连接和初始化都是在程序运行时完成的,只有在类被需要的时候才进行动态加载,这种方式被称为“Java语言的运行期类加载机制”。类(Class)从被加载到虚拟机内存中开始,到卸载出内存为止会经历如下生命周期:其中验证、准备、解析3个部分又统称为连接(Linking)。在以上过程中,除解析外,加载、验证、准备、初始化、卸载这5个阶段的顺序都是确定的,J...转载 2018-12-06 22:44:36 · 195 阅读 · 0 评论 -
JVM 面试考点总结----类加载机制
类是在运行期间第一次使用时动态加载的,而不是一次性加载。因为如果一次性加载,那么会占用很多的内存。类的生命周期包括以下 7 个阶段:加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading)类加载过程包含了加载、验证、...转载 2019-07-14 16:55:13 · 112 阅读 · 0 评论 -
JVM 面试考点总结----内存分配与回收策略
Minor GC 和 Full GCMinor GC:回收新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。 Full GC:回收老年代和新生代,老年代对象其存活时间长,因此 Full GC 很少执行,执行速度会比 Minor GC 慢很多。内存分配策略1. 对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 区分配,当...转载 2019-07-14 16:36:48 · 106 阅读 · 0 评论 -
JVM 面试考点总结----垃圾收集
垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。判断一个对象是否可被回收1. 引用计数算法为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。在两个对象出现循环引用的情况下,此时引用计数器永远...转载 2019-07-14 16:31:22 · 93 阅读 · 0 评论 -
JVM 面试考点总结----运行是数据区域
一、JDK1.8 JVM运行时数据区域概览这里介绍的是JDK1.8 JVM运行时内存数据区域划分。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。二、各区域介绍1. 程序计数器每个线程一块,指向当前线程正在执行的字节码代码的行号。如...转载 2019-07-14 13:45:44 · 139 阅读 · 0 评论