垃圾收集Java中的静态变量

时间:2013-10-24 09:57:54

标签: java unix

我在Unix机器上运行一个Java进程。如果我想停止应用程序,我只是使用shell脚本杀死进程。

这是我的问题:

杀死进程后如何对静态变量进行垃圾回收?

我是否需要将每个静态变量设置为null以声明内存或JVM本身立即执行?

4 个答案:

答案 0 :(得分:5)

如果你在unix盒子上,并强制进行线程转储(kill -3),它​​应该强制进行垃圾回收。

静态变量由ClassLoaders引用的Class对象引用 - 因此,当类别变量可以收集时,您的静态变量也会跟随。

为对象或System.gc()分配null不会启动垃圾回收,它们只是表示有资格进行垃圾回收。杀死进程会将整个Java堆返回给系统。

答案 1 :(得分:5)

当进程被终止时,整个java堆将返回给系统;此时不需要JVM进行垃圾收集。

答案 2 :(得分:0)

Java本身会进行垃圾收集。即使您将其设置为null,也无法强制JVM执行垃圾回收。

答案 3 :(得分:0)

Java应用程序在JVM上运行,JVM是另一个在OS上运行的应用程序。杀死一个应用程序意味着杀死JVM本身,而不是操作系统将释放JVM占用的内存,换句话说就是java应用程序。