深入理解java虚拟机
chen_vs_dong
码畜一个
展开
-
OutOfMemoryError异常
目录Java堆溢出虚拟机栈和本地方法栈溢出方法区和运行时常量池溢出本地直接内存溢出在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都会发生OutOfMemoryError异常的可能。Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限...翻译 2019-07-29 10:42:14 · 209 阅读 · 0 评论 -
垃圾收集器和内存分配策略-1
为什么要了解GC和内存分配?当需要排查各种内存溢出,内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些自动化技术实施必要的监控和调节。程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上在类结构确定下来时就已知,因此这几个区域的内存分配和回收都具备确定性,在这几个区...翻译 2019-07-29 16:26:34 · 137 阅读 · 0 评论 -
Java内存区域&虚拟机对象
Java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据虚拟机规范,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示。程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存程序...翻译 2019-07-17 16:55:13 · 115 阅读 · 0 评论 -
垃圾收集算法
垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法HotSpot的算法实现枚举根节点安全点安全区域标记-清除算法最基础的手机算法是”标记-清除“算法,该算法分为标记和清除两个阶段:首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象。之所以说它是最基础的手机算法,是因为后续的手机算法都是基于这种思路并对其不足进行改进而得打的。他的不足主要有两...翻译 2019-07-30 20:45:44 · 147 阅读 · 0 评论 -
内存分配与回收策略
Java技术体系中提倡的自动内存管理最终可以归结为自动化的解决了两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,往大方面讲,就是在堆上分配(也可能经过JIT编译后被拆解为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使...翻译 2019-08-05 10:56:00 · 118 阅读 · 0 评论 -
垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。本文将会讲解下述七个垃圾收集器。Serial 收集器ParNew 收集器Parallel Scavenge 收集器CMS 收集器Serial Old(MSC) 收集器Parallel Old 收集器G1 收集器如图中所示的收集器,如果两个收集器之间存在连线,就说明他们可以搭配使用。虚拟机所在的区域,则表示...翻译 2019-08-01 22:19:53 · 153 阅读 · 0 评论 -
虚拟机类加载机制
概述类加载的时机类加载的过程加载验证准备解析初始化类加载器类与类加载器双亲委派机制破坏双亲委派机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言中,类型的加载,连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微...翻译 2019-09-11 16:13:56 · 90 阅读 · 0 评论 -
类加载器
类加载器虚拟机团队把类加载阶段中的”通过一个类的全限定名来获取描述此类的二进制字节流“这个动作放到Java虚拟机外部去实现,以便让应用程序自己去决定如何去获取所需要的类。实现这个动作的代码了模块叫做"类加载器"。类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任何一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一...翻译 2019-09-12 17:09:49 · 119 阅读 · 0 评论