【深入理解JVM 七】Jvm垃圾回收机制

本篇博客大部分内容来自《深入理解java虚拟机》,也参考了http://jbutton.iteye.com/blog/1569746这篇文章的部分内容,这里注明出处。这篇博客也是这个系列的第二篇,在这篇博客里我会对java的内存回收机制做个详细的整理。希望通过书写这个系列的博客能让自己对Java底层执行过程有个详细的了解,花费了一整天的时间终于有了一个详细的了解了—TML

概述

接下来的全文流程会按照四个部分来解释垃圾回收机制,做一个全面总结。
第一部分:基本介绍垃圾回收机制的目标,执行时间和方式等。
第二部分:一些成熟的垃圾回收算法
第三部分:一些成熟的垃圾收集器
第四部分:垃圾回收策略有哪些

基本介绍

首先提出三个问题:1,哪些内存需要回收? 2,什么时候回收? 3,如何回收?然后进行简单的回答:

1,哪些内存需要回收?

回收区域主要集中在java堆和方法区

程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,所以不需要考虑回收,而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存。

2,什么时候回收

1、 对象没有引用
2、 作用域发生未捕获异常
3、 程序在作用域正常执行完毕
4、 程序执行了System.exit()
5、 程序发生意外终止(被杀进程等)

3,如何回收

你可能感兴趣的:(【Java技术相关合集】,深入理解Java虚拟机)