SF
Java 攻城狮必须掌握的 JVM 知识
Java 攻城狮必须掌握的 JVM 知识
注册登录
关注博客
注册登录
主页
关于
RSS
类加载器
yanglbme
2018-06-27
阅读 2 分钟
2.7k
因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。
类加载的过程
yanglbme
2018-06-27
阅读 3 分钟
2.3k
类加载的过程 类加载过程包括 5 个阶段:加载、验证、准备、解析和初始化。 加载 加载的过程 “加载”是“类加载”过程的一个阶段,不能混淆这两个名词。在加载阶段,虚拟机需要完成 3 件事: 通过类的全限定名获取该类的二进制字节流。 将二进制字节流所代表的静态结构转化为方法区的运行时数据结构。 在内存中创建一个代表...
类加载的时机
yanglbme
2018-06-27
阅读 2 分钟
1.6k
类加载的时机 类的生命周期 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段: 加载 验证 准备 解析 初始化 使用 卸载 验证、准备、解析 3 个阶段统称为连接。 加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”...
类文件结构
yanglbme
2018-06-27
阅读 3 分钟
2.3k
类文件结构 JVM 的“无关性” 谈论 JVM 的无关性,主要有以下两个: 平台无关性:任何操作系统都能运行 Java 代码 语言无关性: JVM 能运行除 Java 以外的其他代码 Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。 JVM 只认识 .class 文件,它不关心是何种语言...
JVM 性能调优
yanglbme
2018-06-27
阅读 2 分钟
5.5k
堆内存变大后,虽然垃圾收集的频率减少了,但每次垃圾回收的时间变长。如果堆内存为14 G,那么每次 Full GC 将长达数十秒。如果 Full GC 频繁发生,那么对于一个网站来说是无法忍受的。
内存分配与回收策略
yanglbme
2018-06-27
阅读 1 分钟
1.6k
Minor GC:指发生在新生代的垃圾收集动作,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。
HotSpot 垃圾收集器
yanglbme
2018-06-27
阅读 3 分钟
2k
HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。
垃圾收集策略与算法
yanglbme
2018-06-27
阅读 3 分钟
1.4k
程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。
HotSpot 虚拟机对象探秘
yanglbme
2018-06-27
阅读 2 分钟
2.3k
HotSpot 虚拟机对象探秘 对象的内存模型 在 HotSpot 虚拟机中,对象在内存中存储的布局分为 3 块区域: 对象头 实例数据 对齐补充 对象头 对象头记录了对象在运行过程中所需要使用的一些数据: 哈希码 GC 分代年龄 锁状态标志 线程持有的锁 偏向线程 ID 偏向时间戳 对象头可能包含类型指针,通过该指针能确定对象属于哪...
JVM 内存模型
yanglbme
2018-06-27
阅读 3 分钟
4.9k
JVM 内存模型 Java 虚拟机的内存空间分为 5 个部分: 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。 ...