第1章 Java基本概念及环境配置——FAQ1.11 什么是GC?GC的工作原理如何?
2010-01-14 22:32
761 查看
FAQ1.11 什么是GC?GC的工作原理如何?
答:
1.什么是GC?
垃圾回收(Garbage Collection)当一个电脑上的动态内存不再需要时,就应该予以释放,以让出内存,这种内存资源管理,称为垃圾回收(garbage collection),简称GC。
垃圾回收可以让程序员减轻许多负担,也减少程序员犯错的机会。垃圾回收最早起源于LISP语言。目前许多语言如Smalltalk、Java、C#都支援垃圾回收器。
2.GC的工作原理如何?
特征
垃圾回收有两个基本的原理:
1.考虑某个物件在未来的程式执行中,将不会被存取。
2.向这些物件要求归回内存。
实作
GC的来源可能是由编程语言本身内建(如Java、C#)或者经由外面的函数库所提供,而非建立于语言内部,例如贝姆垃圾收集器就是一种可支援C/C++语言的自动内存管理工具。
现在的GC(如Java和.NET)使用世代收集(generation cokkection),依照物体存活时间的长短使用不同的垃圾收集演法,以达到最好的收集效能。
基础的算法有下面几种方式,参考计数、追踪收集、标记清除、复制收集、堆积压缩、标记压缩。
以Java为例,整个Java堆可以切割成三个部分:
1.Young:
1.Eden:存放新生物件
2.Survivor:存放经过垃圾回收没有被清楚的物件
3.semi-Spaces:和Survivor做Copyright collection。
2.Tenured:物件多次回收没有被清除,则移到该区块。
3.Perm:存放加载的类别还有方法物件。
Java不同的世代使用不同GC算法。
1.Minor collection:
YOUNG世代使用将Eden还有Survivor内的资料利用semi-space做复制收集(Copying collection), 并将原本Survivor内经过多次垃圾收集仍然存活的物件移动到Tenured。
2.Major collection则会进行Minor collection,Tenured世代则进行标记压缩收集。
答:
1.什么是GC?
垃圾回收(Garbage Collection)当一个电脑上的动态内存不再需要时,就应该予以释放,以让出内存,这种内存资源管理,称为垃圾回收(garbage collection),简称GC。
垃圾回收可以让程序员减轻许多负担,也减少程序员犯错的机会。垃圾回收最早起源于LISP语言。目前许多语言如Smalltalk、Java、C#都支援垃圾回收器。
2.GC的工作原理如何?
特征
垃圾回收有两个基本的原理:
1.考虑某个物件在未来的程式执行中,将不会被存取。
2.向这些物件要求归回内存。
实作
GC的来源可能是由编程语言本身内建(如Java、C#)或者经由外面的函数库所提供,而非建立于语言内部,例如贝姆垃圾收集器就是一种可支援C/C++语言的自动内存管理工具。
现在的GC(如Java和.NET)使用世代收集(generation cokkection),依照物体存活时间的长短使用不同的垃圾收集演法,以达到最好的收集效能。
基础的算法有下面几种方式,参考计数、追踪收集、标记清除、复制收集、堆积压缩、标记压缩。
以Java为例,整个Java堆可以切割成三个部分:
1.Young:
1.Eden:存放新生物件
2.Survivor:存放经过垃圾回收没有被清楚的物件
3.semi-Spaces:和Survivor做Copyright collection。
2.Tenured:物件多次回收没有被清除,则移到该区块。
3.Perm:存放加载的类别还有方法物件。
Java不同的世代使用不同GC算法。
1.Minor collection:
YOUNG世代使用将Eden还有Survivor内的资料利用semi-space做复制收集(Copying collection), 并将原本Survivor内经过多次垃圾收集仍然存活的物件移动到Tenured。
2.Major collection则会进行Minor collection,Tenured世代则进行标记压缩收集。
相关文章推荐
- 第1章 Java基本概念及环境配置——FAQ1.07 什么是JVM?有什么作用?工作机制如何?
- 第1章 Java基本概念及环境配置——FAQ1.10 JDK. JRE和JVM之间有什么区别?
- 第1章 Java基本概念及环境配置——FAQ1.01 什么是面向对象程序设计?
- 第1章 Java基本概念及环境配置——FAQ1.05 Java SE. Java EE和Java ME有什么区别?
- 第1章 Java基本概念及环境配置——FAQ1.16 如何将程序中的文档注释提取出来生成说明文档?
- 第1章 Java基本概念及环境配置——FAQ1.08 什么是JRE(或J2RE)?
- 第1章 Java基本概念及环境配置——FAQ1.12 如何安装Java基本开发环境JDK?
- 第1章 Java基本概念及环境配置——FAQ1.03 Java语言是如何产生和发展的?
- 第1章 Java基本概念及环境配置——FAQ1.09 什么是JDK?
- 第1章 Java基本概念及环境配置——FAQ1.04 Android与Java语言有什么关系?
- 第1章 Java基本概念及环境配置——FAQ1.15 如何编译. 运行Java应用程序?
- 第1章 Java基本概念及环境配置——FAQ1.06 Java语言的运行机制如何?
- 第1章 Java基本概念及环境配置——FAQ1.18 怎样给main(String[] args)方法的args指定参数值?
- 第1章 Java基本概念及环境配置——FAQ1.13 为何在JDK安装路径下存在两个JRE?
- 第1章 Java基本概念及环境配置——FAQ1.02 面向对象程序设计的基本特征有哪些?
- 第1章 Java基本概念及环境配置——FAQ1.14 JDK安装时设置PATH和CLASSPATH环境变量有何作用?
- 第1章 Java基本概念及环境配置——FAQ1.17 怎样制作鼠标双击就可以运行的Jar文件?
- 你必须知道的261个Java语言问题笔记-Java基本概念及环境配置
- Java第一课 Java的一些基本概念,Java的起源、为什么我们要学习Java语言,Java跨平台原理剖析;Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。
- JAVA学习:第一阶段第一天(java基本概念和配置环境)