1

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

这是我的问题:

杀死进程后如何收集静态变量?

我是否需要将每个静态变量设置为 null 才能立即收回内存或 JVM 本身?

4

4 回答 4

5

如果您在 unix 机器上并强制执行线程转储(kill -3),它​​应该强制进行垃圾收集。

静态变量由 ClassLoaders 引用的 Class 对象引用 - 因此,当类加载器符合收集条件时,您的静态变量将效仿。

将 null 分配给对象或 System.gc() 不会启动垃圾收集,它们只是表明垃圾收集的资格。终止进程会将整个 java 堆返回给系统。

于 2013-10-24T10:02:14.717 回答
5

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

于 2013-10-24T10:02:21.907 回答
0

Java 应用程序在 JVM 上运行,JVM 是在 OS 上运行的另一个应用程序。杀死一个应用程序意味着杀死JVM本身,然后操作系统将释放JVM占用的内存,即java应用程序。

于 2013-10-24T10:22:38.017 回答
0

Java 将自己进行垃圾收集。即使您将其设置为 null,您也不能强制 JVM 进行垃圾收集。

于 2013-10-24T09:59:38.940 回答