标签:策略 了解 收集器 有一个 软引用 包括 搜索 解答 循环
众所周知,在java语言中,内存分配和回收是由jvm自动管理的。因此内存的分配和回收也是jvm三大功能之一。垃圾收集器(GC)需要完成三件事情:
如何回收?
本篇博客将解答jvm是如何处理以上三个问题的。值得注意的是,java运行时数据区中的程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行进栈和出栈的操作,每一个栈帧分配多少内存基本上是在类结构确定下来的时候就已知的。因此以上三个区域不需要过多考虑回收的问题,因为在线程或者方法结束时,内存自然就跟着回收了。垃圾收集器更加关注堆内存的分配和回收,因为堆中内存的分配和回收都是动态的,是在程序运行时才能确定的。
虚拟机栈(栈帧中的本地变量表)中所引用的对象。
方法区中静态属性引用的对象
方法区中常量引用的对象
本地方法区中JNI(即一般说的Native方法)所引用的对象
因为以上四种类型都可能持有对堆中对象的引用。因此这四种都可以作为GC Roots
我们希望有这样一种对象:当内存空间还足够时,将其保留在内存空间之中,如果内存空间在进行垃圾收集之后还是非常紧张,就抛弃这些对象。因此我们需要扩充java中引用的概念:
强引用:一般引用,类似Object obj = new Object()。只要强引用还存在,就不会回收掉被引用的对象。
软引用:
标签:策略 了解 收集器 有一个 软引用 包括 搜索 解答 循环
原文地址:https://www.cnblogs.com/dudu19939/p/9571985.html