Java静态变量可以销毁吗?怎么销毁

程序运行时,可以通过程序控制来销毁静态变量吗?

7个回答

  1. jvm所有的堆和方法区对象都是由GC机制清除的,无法通过程序GC(system.gc()只是发出一个信号,具体GC执行由虚拟机完成),所以肯定不能通过程序控制销毁对象。

  2. 静态变量应该是存在方法区的,我记得看深入JAVA虚拟机中有说,类加载后,如果没有任何new出对象存活,并且静态变量没有被任何引用的话,在fullGC时,类是有可能会被回收掉的,自然静态变量也就被回收了。(具体页数我再去翻翻)

关注问题,希望有更好的回答。

dsjtlmy
dsjtlmy 静态常量才存方法区吧? 而且class 的回收条件极为苛刻,并非没有实例就可能被回收。
大约 6 年之前 回复
dsjtlmy
dsjtlmy 常量才存方法区吧? 而且class 的回收条件极为苛刻,并非没有实例就可能被回收。
大约 6 年之前 回复
wwwcomy
wwwcomy 深入Java虚拟机第二版 P.93
大约 6 年之前 回复

在GC的角度,实际上静态和非静态没有什么区别,都是基于使用|不使用来划分的,因此使用程序的方式销毁一个变量的方式为:
对于所有的该变量的引用置为NULL; --> staticVar = null;
如果要立即回收则手动触发GC一次,否则什么都不用做; --> System.GC();

这个问题涉及到类的销毁(卸载),只有类被销毁了,静态变量就不存在了,可类如何销毁呢?

一般来说,除非实例销毁了,静态变量才能被销毁。

类的class文件被装载的时候静态变量被初始化,类加载器只有卸载这个类的class的时候静态变量才可能被回收。

如果你没有声明为final,就可以用=null的形式,来让gc帮忙销毁。

不知道这有没有实际意义! 销毁静态变量不就会在引用它的地方报错么?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问