
JVM
coder_rad
https://rad911.github.io/
展开
-
深入理解JVM(三):内存溢出
在Java虚拟机规范的描述中,除了程序计数器之外。虚拟机内存的其他几个运行区域都有发生OutOfMemoryError(OOM)异常的可能。1.Java堆溢出Java堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制来清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。来看一下代码:public class HeapO...原创 2018-10-15 19:07:17 · 360 阅读 · 0 评论 -
深入理解JVM(二):Java内存区域
运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包含以下几个运行时数据区域:程序计数器、Java虚拟机栈、本地方法栈、Java堆...原创 2018-10-10 13:51:51 · 236 阅读 · 0 评论 -
深入理解JVM(四):垃圾收集器和内存分配策略
1.哪些内存该回收我们要讨论内存的回收,先要判断哪些内存要回收。前面我们介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈这三个区域随着线程而生,随着线程而灭。这几个区域的内存分配和回收都具有确定性,在几个区域就不需要过多的考虑回收的问题,因为方法结束或者线程结束,内存自然就跟着回收了。而Java堆和方法区则不一样,需要我们去研究。1.1堆中需要回收的对象堆中存放着...原创 2018-10-19 15:09:11 · 242 阅读 · 0 评论 -
深入理解JVM(六):虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java中,类型的加载、连接和初始化过程都是程序在运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性。Java里天生的动态扩展语言特性就是依赖运行期动态加载和动态连接这个特点实现的。1. ...原创 2018-10-28 19:02:04 · 285 阅读 · 0 评论 -
深入理解JVM(五):类文件结构
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。...原创 2018-10-24 11:02:41 · 188 阅读 · 0 评论 -
内存泄露
1.什么是内存泄露内存泄露的定义:对象已经没有被应用程序使用,但是垃圾回收器没有办法移除它们,因为还在引用着。简而言之,对象是可达的但是不再使用。我们可以看一下下面的图方便我们理解。上面图中可以看出,里面有被引用对象和未被引用对象。未被引用对象会被垃圾回收器回收,而被引用的对象却不会。未被引用的对象当然是不再被使用的对象,因为没有对象再引用它。然而无用对象却不全是未被引用对象。其中还有被引...原创 2018-11-25 18:55:23 · 160 阅读 · 0 评论