摘要:
前言: 之前已经介绍过垃圾收集算法,没看过的同学可以查看之前的文章:JVM高级特性-四、垃圾收集算法。 垃圾收集算法是垃圾回收的方法,而垃圾收集器就是对垃圾收集的具体实现。不同厂商对于垃圾收集的实现方式各不相同, 这里主要介绍的jdk1.7只有的hotspot虚拟机,这个虚拟机主要包含如下收集器 年 阅读全文
摘要:
有关可达性分析的基础介绍可参看JVM高级特性-三、垃圾收集之判断对象存活算法中的内容 下面将详细介绍下再HotSpot中是如何实现的 一、枚举根节点 问题: 在从gc root向下查找引用链时,可作为GC ROOT的节点主要在全局性引用(常量、静态变量)和执行上下文(栈帧中的本地变量表),通常方法区 阅读全文
摘要:
一、标记-清除算法 标记清除算法是最基础的收集算法,执行过程就名字一样,分为两个阶段,标记和清除 首先对需要回收的对象进行标记,标记完成后统一对已标记对象进行回收,如下图所示。 具体标记过程的介绍可以看上一篇垃圾收集之判断对象存活算法中的“可达性分析”中介绍的 回收前状态 回收后状态 不足: 1.效 阅读全文
摘要:
一、概述 运行时数据区中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭的 因此,他们的内存分配和回收是确定的,在方法或线程结束时就回收。而Java堆和方 法区则是不确定的,程序运行过程中创建对象的大小是不定的,只有在程序处于运行 期才能知道所需内存的大小 二、“存活算法” 要判断对象是否 阅读全文
摘要:
前面介绍了jvm运行时数据区域后,下面讲解下对内存中数据的其他细节,看他们是如何创建、布局及访问的 一、对象的创建 1.对象的分配 对象的创建分配方式主要有两种:指针碰撞和空闲列表 指针碰撞: 假设堆内存中是绝对规整的,那么,在为新对象分配内存空间时,只需要将指针向空闲空间方向移动新对象 所需大小的 阅读全文
摘要:
区域划分: java虚拟机在执行程序的过程中,将内存分为功能不同的几个区域,如下图: 此图列出了内存划分的各个区域,其中 线程私有的:程序计数器、虚拟机栈、本地方法栈 线程共享的:堆、方法区 下面,逐个介绍各个区域的功能及作用 程序计数器: 1.程序计数器主要用来指向正在执行的字节码行号,每个线程都 阅读全文