java程序是运行在java虚拟机当中的,在java虚拟机的堆中运行着程序所创建的对象。可以使用new,newarray,anewarray,multianewarray指令来创建对象,但是没有明确的代码来释放这些对象所使用的空间。垃圾收集就是自动释放不在被程序使用的对象的过程。为了能够无限制的使用内存,大部分的java虚拟机都附带有垃圾收集堆。
★为什么使用使用垃圾收集
垃圾收集,也就是把程序中不需要的对象作为“垃圾”进行回收,以精确,新鲜的说法就是“内存回收”。当一个对象不再被程序引用的时候,所使用的堆空间可以被回收,以便后续创建的新的对象使用。垃圾收集器必须能断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。在释放不再被引用的对象的过程中,垃圾收集器运行将要被释放对象的终结方法----finalizer
除此之外,垃圾收集器还要处理堆碎块。堆碎块是在正常的程序运行过程中产生的。新的对象分配了空间,不再被引用的对象被释放,所以堆内存的空闲位置介于活动对象之间。请求分配新对象时可能不得不增大堆空间放得下新的对象。在一个虚拟的内存系统中,增长堆所需要的额外空间会影响运行程序的性能。在内存较小的嵌入式系统中,碎块导致虚拟机产生不必要的“内存不足”错误。
将以上这种工作交给java虚拟机有几个好处:
1.可以提高生产效率。在一个不具有垃圾收集机制的语言下编程,可能要花很多的时间来解决难以捉摸的内存问题。使用java,恰恰可以充分的,有效的利用这些时间。
2.可以保持程序的完整性。垃圾收集是java安全策略的一个重要的部分。
存在的缺陷:
加大了程序的负担,可能影响程序的性能。java虚拟机必须追踪哪些对象被正在执行的程序所使用,并且动态的终结释放不再被使用的对象。和明确释放不再被使用的内存比起来,这个活动需要更多的CPU时间。并且,在垃圾收集环境下,程序员对安排CPU时间来释放无用的对象缺乏控制。
★垃圾收集算法
任何垃圾收集算法必须做的两件事情:
1.必须检测出垃圾对象
2.必须回收垃圾对象所使用的堆空间并还给程序
垃圾检测通常建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法触及的对象被认为是垃圾,因为它们不再影响程序的未来执行。
根对象来源:
1.包含局部变量中的对象引用和栈帧的操作数栈。
2.被加载的类的常量池中的对象引用,比如字符串
3.潜在的来源,java虚拟机运行时数据区中从垃圾收集器的堆中分配的部分。
区分活动的对象和垃圾的两个基本方法是引用计数和跟踪。引用计数垃圾收集器通过为堆中的每个对象保存一个计数来区分活动对象和垃圾对象。这个计数记录下了对那个对象的引用的次数。跟踪垃圾收集器实际上追踪从根节点开始的引用图。在追踪中遇上的对象以某种方式打上标记,当追踪结束时,没有被打上标记的对象就被判定是不可触及的,可以被当做垃圾收集。
在编程中寻找快乐,在快乐中自由编程!!!
分享到:
相关推荐
深入理解Java虚拟机学习笔记借鉴.pdf
Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
java虚拟机学习 java虚拟机学习java虚拟机学习java虚拟机学习java虚拟机学习
为了能够无限制的使用内存,大部分的java虚拟机都附带有垃圾收集堆。 ★为什么使用使用垃圾收集 垃圾收集,也是把程序中不需要的对象作为“垃圾”进行回收,以精确,新鲜的说法是“内存回收”。当一个对象...
java虚拟机读书笔记,主要描述阅读Java虚拟机核心技术的描述。
深入理解Java虚拟机学习资料 pdf+mobi
java学习笔记3(java虚拟机)java学习笔记3(java虚拟机)
第1章 :简单地介绍了Java虚拟机的历史并吹捧了←_← 一下Java的平台无关性(一次编译,到处运行); 第2章:概览Java虚拟机整体架构; 第3章:介绍如何将Java语言编写的程序转换为虚拟机指令集; 第4章:定义...
在本篇内容里小编给大家分享了关于java虚拟机学习笔记的进阶内容,需要的朋友们跟着学习下。
深入java虚拟机笔记http://blog.csdn.net/yangzl2008/article/details/8074667
本书是继《深入理解Java虚拟机》之后的又一经典著作,它一方面遵循《Java虚拟机规范》,一方面又独辟蹊径,不仅能让Java虚拟机的学习变得更加简单和有趣,而且能让你对Java虚拟机的原理认识更深入和更深刻!...
经典的Java虚拟机(垃圾收集器和算法)文档,需要深入了解Java虚拟机的原理的人员可以观看,可以升入了解Java虚拟机(垃圾收集器和算法)
该文档是本人的学习笔记,尚未精修,后续会精修排版. 学习笔记:深入浅出 Java 虚拟机.docx
java 虚拟机
java虚拟机规范,高清PDF版本,含有目录结构:第一章:引言; 第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈); 第三章:为java虚拟机编译; 第四章:...
《Java虚拟机规范 7》是一份完整的描述Java虚拟机是如何设计的规范文档。这份文档对于任何一个希望实现Java虚拟机的编译器作者,或者希望实现一个与规范相兼容的Java虚拟机的程序员来说都是必不可少的。
20Java虚拟机-高性能Java虚拟机.avi 3.8MB 19Java虚拟机-MicrosoftJVM.avi 4.9MB 18Java虚拟机-dalvik.avi 2.9MB 17Java虚拟机-j9.avi 5.5MB 16Java虚拟机-JRockit.avi 5.8MB 15Java虚拟机-kvm.avi 3.8MB 14...
深入java虚拟机.pdf
第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中等6章和附录a-c完全可以作为class文件和指令含集的参考手册。本书还附带...