随笔分类 - JVM
Java 虚拟机
摘要:【概述】 首先需要了解对象在内存中的存储布局,其次需要了解对对象的访问定位。 【对象的内存布局】 在 HotSpot 虚拟机中,对象在内存中存储的布局可以分为 3 块区域:对象头(Header)、实例数据(Instance Data)和 对齐填充(Padding)。 HotSpot 虚拟机的对象头包
阅读全文
摘要:【概述】 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java 虚拟机规范中对垃圾收集器应该如何实现没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾处理器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。下图为
阅读全文
摘要:【概述】 常见的垃圾回收算法有:标记-清除算法、复制算法、标记-整理算法、分代收集算法。 【标记-清除算法】 标记-清除算法是最基础的收集算法,如同它的名字一样,算法分为 “标记” 和 “清除” 两个阶段:首先标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象,这里的标记采用的是 “可
阅读全文
摘要:【概述】 在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还 “存活” 着,哪些已经 “死去”(即不可能再被任何途径使用的对象)。 【引用计数算法(Reference Counting)】 算法逻辑是这样的:给对象中添加一个引用计数
阅读全文
摘要:【概述】 Java 技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。 对象的内存分配,往大方向讲,就是在堆上分配,对象主要分配在新生代的 Eden 区上,如果启动了本地线程分配缓存(使用 ThreadLocal 类),则将线程优先在 TLAB
阅读全文
摘要:【概述】 虚拟机设计团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为 “类加载器”。 类加载器可以说是 Java 语言的一项创新,也是 Java 语言流行的原因
阅读全文
摘要:【概述】 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策
阅读全文
摘要:【概述】 在这篇笔记中,需要描述虚拟机中的内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常。虽然 Java 有垃圾处理机制,但是如果生产环境在出现内存溢出异常时,由于开发人员不熟悉 Java 垃圾处理机制,导致无法定位和解决问题,则可能引起较为严重的生产问题。在后续的学习中,将学
阅读全文

浙公网安备 33010602011771号