随笔分类 - JVM
JVM内存结构、OOM、对象是否存活、GC收集算法、GC收集器、类加载机制、
摘要:JVM类加载机制 加载: 根据类的全限定名将.class文件中的二进制字节流加载进内存; 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构; 在Java堆中生成一个代表这个类的Class对象,作为对方法区中数据的访问入口。 验证:对二进制字节流进行校验,是否符合JVM字节码规范。主要为
阅读全文
摘要:前一篇讲了垃圾收集算法--JVM之GC算法、垃圾收集算法——标记-清除算法、复制算法、标记-整理算法、分代收集算法,如果把它看作是方法论,那么下面说的就应该是内存回收的具体实现。 先看一下JVM中有哪些垃圾收集器,如下图所示: 上图一共展示了七种作用于不同分代的垃圾收集器,如果两个收集器之间存在连线
阅读全文
摘要:标记-清除算法 此垃圾收集算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记对象,它的标记过程前面已经说过——如何判断对象是否存活/死去 死去的对象就会被标记,然后被清除。 它主要有两点不足: 一个是效率问题,标记和清除两个过程的效率都不高; 另一个是
阅读全文
摘要:无论是通过引用计数法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判断对象是否存活都与“引用”有关, 相关资料:如何判断对象是否存活/死去 那么引用究竟是什么?让我们一起来看一下 在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Refrenc
阅读全文
摘要:在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器对堆内存进行回收前,都会先判断这些 对象之中哪些还“存活”着,哪些已经“死去”(即不可能在被任何途径使用的对象)。一共有两种算法: 1、引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器 值
阅读全文
摘要:关于虚拟机栈和本地方法栈,在JVM规范中描述了两种异常: 1.如果线程请求的栈深度大于JVM所允许的深度,将抛出StackOverflowError异常; 2.如果虚拟机在扩展栈时无法申请到足够的内存,就会抛出OutOfMemoryError异常。 下面进行虚拟机栈和本地方法栈的SOF异常测试: 运
阅读全文
摘要:Java堆内存溢出 只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常,代码如下: 在运行的时候,需要设置一下Java堆的大小,并且不可扩展,操作如下: 然后填写JVM启动参数:-Xms20m -X
阅读全文
摘要:1、程序计数器: 程序计数器是线程私有的内存,JVM多线程是通过线程轮流切换并分配处理器执行时间的方式实现的,当线程切换后需要恢复到正确的执 行位置(处理器)时,就是通过程序计数器来实现的。此内存区域是唯一 一个在JVM规范中没有规定任何OutOfMemoryError情况的区域。 2、Java虚拟
阅读全文