[英]Garbage collecting static variables in Java
我在Unix机器上运行一个Java进程。 如果要停止该应用程序,我只是使用shell脚本终止该进程。
这是我的问题:
杀死进程后如何收集静态变量?
我是否需要将每个静态变量设置为null才能立即收回内存或JVM本身?
如果您在Unix机器上,并强制执行线程转储(kill -3),则应强制进行垃圾回收。
静态变量由Class对象引用,而Class对象由ClassLoaders引用-因此,当分类器变得易于收集时,您的静态变量将随之效仿。
将null分配给对象或System.gc()不会启动垃圾回收,它们只是发出垃圾回收资格的信号。 终止进程会将整个java堆返回给系统。
当一个进程被杀死时,整个java堆将返回到系统。 此时,JVM无需进行垃圾收集。
Java本身将进行垃圾收集。 即使将其设置为null,也不能强制JVM进行垃圾回收。
Java应用程序在JVM上运行,而JVM是在OS上运行的另一个应用程序。 杀死应用程序意味着杀死JVM本身,然后OS将释放JVM占用的内存,即Java应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.