首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
深入理解java虚拟机(1)------内存区域与内存溢出
】的更多相关文章
深入理解Java虚拟机:垃圾收集器与内存分配策略
目录 3.2 对象已死吗 判断一个对象是否可被回收 引用类型 finalize() 回收方法区 3.3. 垃圾收集算法 1.Mark-Sweep(标记-清除)算法 2.Copying(复制)算法 3.Mark-Compact(标记-整理)算法 4.Generational Collection(分代收集)算法 3.5 垃圾收集器 1.Serial 2.ParNew 3.Parallel Scavenge 4.Serial Old 5.Parallel Old 6.CMS 7.G1 3.6 内存分…
《深入理解Java虚拟机》学习笔记之内存分配
JVM在执行Java程序的过程中会把它所管理的内存划分若干个不同的数据区域,如下图: 大致可以分为两类:线程私有区域和线程共享区域. 线程私有区域 程序计数器(Program Counter Register): 是一块很小的内存,可以看做是当前线程所执行的字节码行号指示器,虚拟机根据计数器值获取吓一条要执行的指令. JVM栈:虚拟机栈(JVM stacks),每个方法被执行时都会同时创建一个栈帧(stack frame)用于存储局部变量表.操作数栈.动态连接.方法出口等信息.每一个方法被调用直…
《深入理解java虚拟机》读书笔记1--java内存区域
Java内存管理 本文主要介绍Java虚拟机运行时的内存区域是如何划分的.Java对象的创建过程.Java对象的内存布局.Java对象的访问定位 一:运行时区域划分 主要可以分为以下 几个: 程序计数器: 栈(虚拟机栈和本地方法栈): 堆: 方法区: 1.程序计数器 记录正在执行的虚拟机字节码指令的地址.唯一一个没有规定任何OutOfMemoryError的区域. 2.栈 栈主要用来存储局部变量表(各种局部变量(方法中的变量),基本类型和对象引用类型).操作数栈.动态链接等信息.线程私有的.所以…
《深入理解Java虚拟机》学习笔记之内存回收
垃圾收集(Garbage Collection,GC)并不是Java语言的半生产物,事实上GC历史远比Java久远,真正使用内存动态分配和垃圾收集技术的语言是诞生于1960年的Lisp语言.经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟.而判断对象是否存活的算法主流有两种引用计数算法和根搜索算法. 引用计数算法 引用计数算法很简单,它实际上是通过在对象头中分配一个空间来保存该对象被引用的次数.如果该对象被其它对象引用,则它的引用计数加一,如果删除对该对象的引用,那么它的引用计数就减…
深入理解Java虚拟机笔记——垃圾收集器与内存分配策略
目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Stop The World) 安全点 垃圾收集器 Serial 收集器 ParNew 收集器 Parallel Scanvenge 收集器 CMS 收集器 G1 收集器 新生代.老年代 和 永久代(元空间) 新生代 老年代 永久代(元空间) Minor GC.Major GC 和 Full GC 何时执…
深入理解Java虚拟机二:垃圾收集与内存分配
垃圾收集:垃圾收集要完成三件事,包括哪些内存需要回收,什么时候回收及如何回收. 1.需要回收的内存判定:没有引用指向原先分配给某个对象的内存时,则该内存是需要回收的垃圾 Java垃圾收集器在对内存进行回收之前,首先就是要确定这些对象哪些已经"死去",对已经"死去"的对象进行内存回收. 目前,确定对象是否存活的主流算法有: 1)引用计数算法: 所谓引用计数算法,即给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1:当引用失效时,计数器值就减1:任何时…
深入理解Java虚拟机之读书笔记三 内存分配策略
一般的内存分配是指堆上的分配,但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配.对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下直接分配在老年代中,分配的规则并不是百分之百固定的.细节取决于哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置. 一.对象优先在Eden分配 优先在新生代的Eden区中分配,当不够时,发起一次Minor GC. 二.大对象直接进入老年代 需要连续大量内存空间的Java对象,长字符串和数组等. 三.…
《深入理解Java虚拟机》——垃圾收集器与内存分配策略
GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作:当计数器值为0,则说明对象不可能再被使用.但是它无法解决循环引用的问题. public class ReferenceCountingGC { public Object instance = null; public static void testGC(){ ReferenceCountingG…
深入理解java虚拟机(3)垃圾收集器与内存分配策略
一.根搜索算法: (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时候,则证明此对象不可用 (2)GC Roots对象包括这几种:虚拟机栈中引用的对象:方法区中的类静态属性引用的对象:方法区中常量的引用对象:本地方法中JNI的引用对象 二.垃圾收集算法 1.标记-清楚算法: (1)基本思想:首先标记出要回收的对象,在标记完后回收掉所有被标记的对象 (2)缺点:第一是标记和清楚…
Java内存区域与内存溢出异常——深入理解Java虚拟机 笔记一
Java内存区域 对比与C和C++,Java程序员不需要时时刻刻在意对象的创建和删除过程造成的内存溢出.内存泄露等问题,Java虚拟机很好地帮助我们解决了内存管理的问题,但深入理解Java内存区域,有助于帮我们理解Java虚拟机到底是如何解决内存问题,如果出现了内存泄露或内存溢出等方面的问题,我们也可以找到问题的解决方案. Java内存区域划分 Java虚拟机在执行Java程序的过程中,会把它管理的内存划分成若干个数据区域.有的区域随着虚拟机进程启动而存在,有的区域则是依赖用户线程的启动和结束而…