我正在开发一个组项目,其中我们在Worker类中声明了几个静态常量。这个worker的多个线程被生成,我们的java应用程序似乎使用了大量的内存。我想知道这是否是每个线程分配更多这些静态常量的结果,但我不确定。
答案 0 :(得分:8)
不,每个ClassLoader只有一个静态变量实例。
public class Foo {
// only 1 of these
private static int bar = 10;
}
然而,重要的是要意识到这并不意味着该值是自动同步的。如果线程正在更改此值,则需要synchronized
,否则他们可以根据竞争条件看到不同的值。
答案 1 :(得分:1)
静态变量显式未分配,具体取决于线程数。相反,静态变量在ClassLoader中分配一次。
答案 2 :(得分:0)
如果您使用的是“大量”内存,例如很多GB,我会使用内存分析器来查找原因并在可能的情况下修复它。如果你使用几百MB,我不会担心,除非你知道这是一个问题。