Java 垃圾收集器必须只在堆中工作吗?

Java 垃圾收集器必须只在堆中工作吗?,java,jvm,Java,Jvm,垃圾收集器是否必须只在堆中工作?那么方法领域呢?我知道垃圾收集器会从内存的堆区域中移除垃圾。当调用堆栈在方法退出时弹出一个方法框架时,方法区域会自动清理。它不必只在堆中工作。但它在堆栈(或者,如您所说的“方法区域”)中运行是没有意义的。在堆栈上分配的内存将在方法返回时立即释放 那么,考虑到这一点,您希望垃圾收集器在堆栈中做什么?虽然从理论上讲,您可能希望它在一个非常长时间运行的方法中释放内存,但在绝大多数情况下,该方法将在垃圾收集器开始查看它之前很久返回。计算机很快。另外,如果您在一个长期运行的

垃圾收集器是否必须只在堆中工作?那么方法领域呢?我知道垃圾收集器会从内存的堆区域中移除垃圾。

当调用堆栈在方法退出时弹出一个方法框架时,方法区域会自动清理。

它不必只在堆中工作。但它在堆栈(或者,如您所说的“方法区域”)中运行是没有意义的。在堆栈上分配的内存将在方法返回时立即释放


那么,考虑到这一点,您希望垃圾收集器在堆栈中做什么?虽然从理论上讲,您可能希望它在一个非常长时间运行的方法中释放内存,但在绝大多数情况下,该方法将在垃圾收集器开始查看它之前很久返回。计算机很快。另外,如果您在一个长期运行的方法中保留数据,那么很可能仍然存在对它的引用。

什么是“方法区域”?您是否引用了定义此术语的JVM规范?如果“方法区域”指的是代码所在的位置,则在整个类被垃圾收集之前,代码不会被垃圾收集,这要求类装入器作为一个先决条件是可收集的。如果您指的是一个执行方法的堆栈框架,那么除了原语和引用之外没有其他内容,因此根本不需要收集垃圾。简言之,你的问题毫无意义。