java虚拟机的堆里存放着正在运行的java程序所创建的所有对象。当一个对象不再被程序引用时,它所使用的堆空间可以被回收,以便后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。在释放不再被引用的对象的过程中,垃圾收集器运行将要被释放的对象的终结方法(finalizer)。
除了释放不再被引用的对象,垃圾收集器还要处理堆碎片。在一个虚拟内存系统中,增长的堆所需要的额外分页(或交换)空间会影响运行程序的性能。
垃圾收集
垃圾收集算法要做两件事情
1) 检测出垃圾对象
2)回收垃圾对象所使用的堆空间并还给程序
垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之前存在引用路径,这个对象就是可触及的。对于程序来说,根对象总是可以访问的。从这个根对象开始,任何可以被触及的对象都被认为是活动对象。无法被触及的对象被认为是垃圾,因为它们不在影响程序的执行。
java虚拟机的根对象集合根据实现而不同,但是总会包含局部变量中的对象引用和栈帧的操作数栈(以及类变量中的对象引用)。另一个根对象的来源是被加载的类的常量池中的对象引用,比如字符串。还有一个来源是传递到本地方法中的,没有被本地方法释放的对象引用。另一个潜在的根对象的来源是,java虚拟机运行时数据区中从垃圾收集器的堆中分配的部分。
区分活动对象和垃圾的两个基本方法是引用计数和跟踪。
引用计数垃圾收集器通过为堆中的每一个对象保存一个计数来区分活动对象和垃圾对象。这个计数记录下了对那个对象的引用次数。
跟踪垃圾收集器实际上追踪从根结点开始的引用图。在追踪中遇上的对象以某种方式打上标记,当追踪结束时,没有被打上标记的对象就是被断定是不可触及的,可以被当作垃圾收集。
java程序的退出有两种机制:一种是程序运行完成,自然退出.另一种是抛出异常或者错误退出.
//因此当主线程启动一个子线程,并且主线程以以上任何一种方式退出后.
子线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该子线程是用户线程,该子线程会继续执行.
如果该子线程是守护线程,该子线程会终结.//
//这里写得有问题
应该是java程序启动一个线程,并且java程序以以上任何一种方式退出后.
在主线程退出,在jvm退出之前.jvm会判断当前的进程.
如果在没有用户进程(有或没有守护线程)的情况下,jvm会退出
该线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该线程是用户线程,该线程会继续执行.
如果该线程是守护线程,该线程会终结.
分享到:
- 2009-01-03 23:37
- 浏览 1341
- 评论(5)
- 论坛回复 / 浏览 (5 / 4308)
- 查看更多
相关推荐
《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...
译者序 前言 第1章 Java体系结构介绍 ...第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句
《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...
《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...
《深入JAVA虚拟机 不那么完美的第二版》这本书虽然在印刷上可能存在一些小瑕疵,但这并不影响我们从中汲取宝贵的Java虚拟机(JVM)知识。Java虚拟机是Java平台的核心组成部分,它负责执行Java程序,提供了跨平台的...
《深入Java虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心机制的机会。随书光盘包含了书中提及的各种示例代码、实验数据以及...
第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...
《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,针对JVM的深入了解和优化提供了详尽的解析。这本书对于Java开发者、系统管理员以及对Java性能调优感兴趣的读者来说,是不可或缺的参考资料。下面...
《深入Java虚拟机第二版》是一本深度剖析Java虚拟机(JVM)的权威著作,其英文版以CHM(Microsoft Compiled HTML Help)格式呈现,为读者提供了方便的电子阅读体验。CHM文件是一种常见的帮助文档格式,它将HTML页面...
《深入Java虚拟机(带目录+清晰+光盘) 第二版》是Java开发者们不可或缺的一本技术宝典。本书全面、深入地探讨了Java虚拟机(JVM)的工作原理和内部机制,对于理解Java程序的运行性能以及优化代码具有极其重要的价值。...
《深入Java虚拟机》是Java开发者必读的经典之作,由Bill Venners撰写。这本书以其深入浅出的方式,详尽地解析了Java虚拟机(JVM)的工作原理和内部机制,帮助开发者提升对Java程序运行时环境的理解,从而能够编写出...
第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...
《深入Java虚拟机源码》一书主要涵盖了Java虚拟机(JVM)的内部工作原理,包括类加载机制、内存管理、字节码执行引擎、垃圾收集算法、编译优化等多个核心主题。以下是对这些章节内容的详细阐述: 1. **第3章:类...
《深入Java虚拟机》是Bill Venners的经典之作,该书详细揭示了Java技术的核心——Java虚拟机(JVM)的内在运作机制。在2003年9月出版的这个版本中,作者深入浅出地阐述了JVM的架构和功能,帮助读者理解Java程序的...
《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,它为读者揭示了Java编程语言背后的运行机制。本书是Java开发者深入理解平台内部工作原理的必备读物,无论你是初学者还是经验丰富的开发人员,都...
深入java虚拟机第二版 第1章 Java体系结构介绍 1.1 为什么使用Java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 Java虚拟机 1.3.2 类装载器的体系结构 1.3.3 Java class文件 1.3.4 Java API 1.3.5 ...
第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...
《深入JAVA虚拟机第二版》是一部深度探讨Java虚拟机(JVM)的权威著作,它为开发者揭示了JVM的工作原理及其内部机制。本部分涵盖了第一到第七个部分的内容,旨在帮助读者理解并优化Java应用程序的性能。 1. **Java...