java中何时释放静态变量内存?

java中何时释放静态变量内存?,java,oop,static,jvm,java-memory-model,Java,Oop,Static,Jvm,Java Memory Model,我知道非静态变量在变量处于范围外时被释放,但静态变量的范围在所有上下文中 由于静态类/成员每个类加载器加载一次,当类加载器符合GC条件时,静态成员也符合GC条件。静态变量的内存在程序开始时分配在常规内存中,而不是专门为程序预留的堆栈内存。 这样做的好处是,它使变量或过程完全恒定,并且不会意外更改值。这样做的缺点是,直到程序终止,内存才会释放。我从来没有听说过静态值比定期声明静态值占用更多内存的情况,但是它们的内存使用一直保持不变。对于简单程序,默认类加载器不会卸载,但在具有多个类加载器的复杂程序

我知道非静态变量在变量处于范围外时被释放,但静态变量的范围在所有上下文中

由于静态类/成员每个类加载器加载一次,当类加载器符合GC条件时,静态成员也符合GC条件。

静态变量的内存在程序开始时分配在常规内存中,而不是专门为程序预留的堆栈内存。
这样做的好处是,它使变量或过程完全恒定,并且不会意外更改值。这样做的缺点是,直到程序终止,内存才会释放。我从来没有听说过静态值比定期声明静态值占用更多内存的情况,但是它们的内存使用一直保持不变。

对于简单程序,默认类加载器不会卸载,但在具有多个类加载器的复杂程序中,会发生这种情况+1@PeterLawrey简而言之,如果我们配置/拥有多个类加载器:谢谢。可以说静态成员总是在上下文中吗?上下文是指范围吗?是的。啊,对不起,我的意思是,当应用程序运行时,静态成员总是在内存中。请看和。可能是重复的