线程化时是否多次分配java静态字段?

时间:2012-03-14 18:04:43

标签: java multithreading memory static

我正在开发一个组项目,其中我们在Worker类中声明了几个静态常量。这个worker的多个线程被生成,我们的java应用程序似乎使用了大量的内存。我想知道这是否是每个线程分配更多这些静态常量的结果,但我不确定。

3 个答案:

答案 0 :(得分:8)

不,每个ClassLoader只有一个静态变量实例。

 public class Foo {
      // only 1 of these
      private static int bar = 10;
 }

然而,重要的是要意识到这并不意味着该值是自动同步的。如果线程正在更改此值,则需要synchronized,否则他们可以根据竞争条件看到不同的值。

答案 1 :(得分:1)

静态变量显式分配,具体取决于线程数。相反,静态变量在ClassLoader中分配一次。

答案 2 :(得分:0)

如果您使用的是“大量”内存,例如很多GB,我会使用内存分析器来查找原因并在可能的情况下修复它。如果你使用几百MB,我不会担心,除非你知道这是一个问题。