我在 Unix 机器上运行一个 Java 进程。如果我想停止应用程序,我只是使用 shell 脚本终止进程。
这是我的问题:
杀死进程后如何收集静态变量?
我是否需要将每个静态变量设置为 null 才能立即收回内存或 JVM 本身?
如果您在 unix 机器上并强制执行线程转储(kill -3),它应该强制进行垃圾收集。
静态变量由 ClassLoaders 引用的 Class 对象引用 - 因此,当类加载器符合收集条件时,您的静态变量将效仿。
将 null 分配给对象或 System.gc() 不会启动垃圾收集,它们只是表明垃圾收集的资格。终止进程会将整个 java 堆返回给系统。
当一个进程被杀死时,整个java堆返回给系统;此时 JVM 不需要进行垃圾收集。
Java 应用程序在 JVM 上运行,JVM 是在 OS 上运行的另一个应用程序。杀死一个应用程序意味着杀死JVM本身,然后操作系统将释放JVM占用的内存,即java应用程序。
Java 将自己进行垃圾收集。即使您将其设置为 null,您也不能强制 JVM 进行垃圾收集。