最近看了篇博客,说静态和非静态都被Loader Heap加载,然后写入Method Table中,就不受GC控制了,也就是都得等应用程序结束后才被释放。那么这么说非静态变量就不会自动回收了?
到底是怎么个情况?之前学的不对?
你所谓的写入method table是指对象的方法的指针吧?这个是编译时的行为,这个时候都没有gc(运行时),所以谈不上控制不控制。
而针对gc而言,任何没有根引用到的对象都可能在接下来的gc某个周期被回收掉,比如你一个方法中的变量,在方法执行结束后就可能在下次gc中被回收掉。而针对静态字段,引用它的对象为包含这个字段的type,而type信息基本不可能在单一应用程序域内被回收。