`
frenchmay
  • 浏览: 232560 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入java虚拟机第9章, 垃圾收集(1)

阅读更多

java虚拟机的堆里存放着正在运行的java程序所创建的所有对象。当一个对象不再被程序引用时,它所使用的堆空间可以被回收,以便后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。在释放不再被引用的对象的过程中,垃圾收集器运行将要被释放的对象的终结方法(finalizer)。

除了释放不再被引用的对象,垃圾收集器还要处理堆碎片。在一个虚拟内存系统中,增长的堆所需要的额外分页(或交换)空间会影响运行程序的性能。

 

垃圾收集

垃圾收集算法要做两件事情

1) 检测出垃圾对象

2)回收垃圾对象所使用的堆空间并还给程序

 

垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之前存在引用路径,这个对象就是可触及的。对于程序来说,根对象总是可以访问的。从这个根对象开始,任何可以被触及的对象都被认为是活动对象。无法被触及的对象被认为是垃圾,因为它们不在影响程序的执行。

 

java虚拟机的根对象集合根据实现而不同,但是总会包含局部变量中的对象引用和栈帧的操作数栈(以及类变量中的对象引用)。另一个根对象的来源是被加载的类的常量池中的对象引用,比如字符串。还有一个来源是传递到本地方法中的,没有被本地方法释放的对象引用。另一个潜在的根对象的来源是,java虚拟机运行时数据区中从垃圾收集器的堆中分配的部分。

 

区分活动对象和垃圾的两个基本方法是引用计数和跟踪。

引用计数垃圾收集器通过为堆中的每一个对象保存一个计数来区分活动对象和垃圾对象。这个计数记录下了对那个对象的引用次数。

跟踪垃圾收集器实际上追踪从根结点开始的引用图。在追踪中遇上的对象以某种方式打上标记,当追踪结束时,没有被打上标记的对象就是被断定是不可触及的,可以被当作垃圾收集。

 


java程序的退出有两种机制:一种是程序运行完成,自然退出.另一种是抛出异常或者错误退出.

//因此当主线程启动一个子线程,并且主线程以以上任何一种方式退出后.

子线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该子线程是用户线程,该子线程会继续执行.
如果该子线程是守护线程,该子线程会终结.//

//这里写得有问题

应该是java程序启动一个线程,并且java程序以以上任何一种方式退出后.

在主线程退出,在jvm退出之前.jvm会判断当前的进程.

如果在没有用户进程(有或没有守护线程)的情况下,jvm会退出

该线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该线程是用户线程,该线程会继续执行.
如果该线程是守护线程,该线程会终结.

 

分享到:
评论
5 楼 frenchmay 2009-01-04  
taga 写道
“如果是守护线程,该子线程会终结. ”
为什么??

在主线程退出,在jvm退出之前.jvm会判断当前的进程.

如果在没有用户进程(有或没有守护线程)的情况下,jvm会退出

该线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该线程是用户线程,该线程会继续执行.
如果该线程是守护线程,该线程会释放.
4 楼 frenchmay 2009-01-04  
maoxiaolu2000 写道
如果主线程意外中断了,他它开启的其它线程,在虚拟机没有结束进程的情况下,是不是永远不会被释放。


在主线程退出,在jvm退出之前.jvm会判断当前的进程.

如果在没有用户进程(有或没有守护线程)的情况下,jvm会退出

该线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该线程是用户线程,该线程会继续执行.
如果该线程是守护线程,该线程会释放.
3 楼 taga 2009-01-04  
“如果是守护线程,该子线程会终结. ”
为什么??
2 楼 frenchmay 2009-01-04  
maoxiaolu2000 写道

如果主线程意外中断了,他它开启的其它线程,在虚拟机没有结束进程的情况下,是不是永远不会被释放。

java程序的退出有两种机制:一种是程序运行完成,自然退出.另一种是抛出异常或者错误退出.

因此当主线程启动一个子线程,并且主线程以以上任何一种方式退出后.
子线程是否继续执行取决于这个线程是用户线程还是守护线程.如果该子线程是用户线程,该子线程会继续执行.
如果该子线程是守护线程,该子线程会终结.
1 楼 maoxiaolu2000 2009-01-04  
如果主线程意外中断了,他它开启的其它线程,在虚拟机没有结束进程的情况下,是不是永远不会被释放。

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    深入JAVA虚拟机第二版.pdf 目录

    译者序 前言 第1章 Java体系结构介绍 ...第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句

    深入JAVA虚拟机第二版 Bill Venners著 曹晓钢 蒋靖译

    《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...

    深入java虚拟机 高清pdf 高清高清高清

    《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...

    深入JAVA虚拟机 不那么完美的第二版.pdf.zip

    《深入JAVA虚拟机 不那么完美的第二版》这本书虽然在印刷上可能存在一些小瑕疵,但这并不影响我们从中汲取宝贵的Java虚拟机(JVM)知识。Java虚拟机是Java平台的核心组成部分,它负责执行Java程序,提供了跨平台的...

    深入java虚拟机第二版随书光盘

    《深入Java虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心机制的机会。随书光盘包含了书中提及的各种示例代码、实验数据以及...

    深入Java虚拟机(原书第2版)及书中源代码

    第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...

    深入JAVA虚拟机第二版.7z

    《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,针对JVM的深入了解和优化提供了详尽的解析。这本书对于Java开发者、系统管理员以及对Java性能调优感兴趣的读者来说,是不可或缺的参考资料。下面...

    深入Java虚拟机第二版chm英文

    《深入Java虚拟机第二版》是一本深度剖析Java虚拟机(JVM)的权威著作,其英文版以CHM(Microsoft Compiled HTML Help)格式呈现,为读者提供了方便的电子阅读体验。CHM文件是一种常见的帮助文档格式,它将HTML页面...

    深入Java虚拟机(带目录+清晰+光盘) 第二版

    《深入Java虚拟机(带目录+清晰+光盘) 第二版》是Java开发者们不可或缺的一本技术宝典。本书全面、深入地探讨了Java虚拟机(JVM)的工作原理和内部机制,对于理解Java程序的运行性能以及优化代码具有极其重要的价值。...

    深入Java虚拟机(原书第二版)Bill Venners 著

    《深入Java虚拟机》是Java开发者必读的经典之作,由Bill Venners撰写。这本书以其深入浅出的方式,详尽地解析了Java虚拟机(JVM)的工作原理和内部机制,帮助开发者提升对Java程序运行时环境的理解,从而能够编写出...

    深入java虚拟机中文第2版

    第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...

    深入java虚拟机源码

    《深入Java虚拟机源码》一书主要涵盖了Java虚拟机(JVM)的内部工作原理,包括类加载机制、内存管理、字节码执行引擎、垃圾收集算法、编译优化等多个核心主题。以下是对这些章节内容的详细阐述: 1. **第3章:类...

    深入Java虚拟机 Bill Venners著 2003.09 P461.rar

    《深入Java虚拟机》是Bill Venners的经典之作,该书详细揭示了Java技术的核心——Java虚拟机(JVM)的内在运作机制。在2003年9月出版的这个版本中,作者深入浅出地阐述了JVM的架构和功能,帮助读者理解Java程序的...

    深入JAVA虚拟机第二版

    《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,它为读者揭示了Java编程语言背后的运行机制。本书是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 ...

    深入java虚拟机

    第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 ...

    深入JAVA虚拟机第二版 1(共2部分)

    《深入JAVA虚拟机第二版》是一部深度探讨Java虚拟机(JVM)的权威著作,它为开发者揭示了JVM的工作原理及其内部机制。本部分涵盖了第一到第七个部分的内容,旨在帮助读者理解并优化Java应用程序的性能。 1. **Java...

Global site tag (gtag.js) - Google Analytics