我在Unix机器上运行一个Java进程。如果我想停止应用程序,我只是使用shell脚本杀死进程。
这是我的问题:
杀死进程后如何对静态变量进行垃圾回收?
我是否需要将每个静态变量设置为null以声明内存或JVM本身立即执行?
答案 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应用程序。