Java-垃圾收集器
2017-09-05 09:11
134 查看
在Java堆和方法区中:
一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样;
我们只有在程序处于运行期间的时候才能知道会创建那些对象;
这部分的内存的分配和回收都是动态的,垃圾收集器所关注的就是这部分的内存。
而在程序计数器、JVM栈、本地方法栈中每一个栈帧分配多少的内存基本上是在类结构确定下来的时候就已知了。
判断对象是否存活的算法
1.引用算法:给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器就会加1;当引用失效时,计数器的值就会减1;这样任何时刻计数器为0的对象就是不可能再被使用的。(缺陷:当对象存在着相互引用对方的时候,该算法无法正确判断对象那个是否存活)
2.可达性分析算法
通过一系列的“DC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径就是引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连的时候,则此对象就是不可用的。
在JAVA语言中,可以作为GC Roots的对象包括:
1.虚拟机栈(栈帧中的本地变量表)中引用的对象
2.方法区中 类静态属性 引用的对象
3.方法区 常量 引用的对象
4.本地方栈中的JNI(Native方法)引用的对象。
3.垃圾收集算法
1.标记-清除算法
2.复制算法
3.标记-整理算法
4.分代收集算法(商业虚拟机)
一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样;
我们只有在程序处于运行期间的时候才能知道会创建那些对象;
这部分的内存的分配和回收都是动态的,垃圾收集器所关注的就是这部分的内存。
而在程序计数器、JVM栈、本地方法栈中每一个栈帧分配多少的内存基本上是在类结构确定下来的时候就已知了。
判断对象是否存活的算法
1.引用算法:给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器就会加1;当引用失效时,计数器的值就会减1;这样任何时刻计数器为0的对象就是不可能再被使用的。(缺陷:当对象存在着相互引用对方的时候,该算法无法正确判断对象那个是否存活)
2.可达性分析算法
通过一系列的“DC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径就是引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连的时候,则此对象就是不可用的。
在JAVA语言中,可以作为GC Roots的对象包括:
1.虚拟机栈(栈帧中的本地变量表)中引用的对象
2.方法区中 类静态属性 引用的对象
3.方法区 常量 引用的对象
4.本地方栈中的JNI(Native方法)引用的对象。
3.垃圾收集算法
1.标记-清除算法
2.复制算法
3.标记-整理算法
4.分代收集算法(商业虚拟机)
相关文章推荐
- Java垃圾收集算法—深入理解Java虚拟机(七)
- JAVA中垃圾收集哭泣相对于以前的语言有什么优势?
- java之垃圾收集器
- Java垃圾收集学习笔记
- Java垃圾收集机制
- 【深入Java虚拟机】之八:Java垃圾收集机制
- java jvm 垃圾收集器
- Java的内存结构(Memory Structure)和垃圾收集(Garbage Collection)图解
- java 垃圾回收步步深入03----垃圾收集算法
- java垃圾收集算法
- Java GC 垃圾收集
- Java虚拟机(二):Java GC算法 垃圾收集器
- IBM 的 Java 诊断,第 2 部分: 使用 Extensible Verbose Toolkit 进行垃圾收集
- Java 垃圾收集器与内存分配策略(一):对象“死亡判断”和四种引用
- 深入理解Java G1垃圾收集器
- 垃圾清理势在必行——Java垃圾收集算法
- Java垃圾收集流程
- java垃圾收集器
- Java清除:收尾和垃圾收集
- java中的垃圾收集器