4

我的AP计算机科学老师告诉我不要使用静态方法,因为Java垃圾回收只影响非静态方法,因此不再使用的静态方法会占用额外的内存。我几乎肯定 GC 永远不会影响任何方法,只影响对象,但在我说任何话之前我想确定一下。那么GC和方法有关系吗?

4

3 回答 3

8

假设她真的说的是方法而不是领域,那么你的老师在这种情况下是错误的。正如您所说,垃圾收集是从已分配的对象中回收内存的过程,分配它们的方法的范围无关紧要。

作为旁注,静态字段是另一回事。将对象保存在静态字段中(通常)确实会阻止垃圾收集器做它的事情,因为该类将始终持有对它的引用,因此它没有资格被收集。

于 2012-09-16T19:15:10.897 回答
1

使用静态方法,因为Java垃圾回收只影响非静态方法,因此不再使用的静态方法会占用额外的内存。

我想你想念他/她说的话。一个方法只有在它的 ClassLoader 被卸载时才会被卸载,在大多数 Java SE 程序中,永远不会。

于 2012-09-16T19:13:54.347 回答
1

我觉得你的老师错了。问他/她是否认为克隆对象时方法也会被复制?如果他/她说是,那么他/她就真的错了。

方法是代码,代码是静态的,即当类存在时,它始终存在于一个实例中。

于 2012-09-16T19:20:48.817 回答