2012-03-14 2 views
3

Я работаю над проектом группы, в котором у нас есть несколько статических констант, объявленных в классе Worker. Множество потоков этого рабочего порождают, и наше приложение java, кажется, использует огромный объем памяти. Мне интересно, является ли это результатом каждого потока, выделяющего больше этих статических констант, но я не уверен.Являются ли статические поля java несколько раз при поточной передаче?

+1

Просто идея. Там может возникнуть проблема с горячим развертыванием с затяжными экземплярами старого класса. Это должен показать перезапуск сервера приложений. –

+1

@MikeBaranczak В программировании «переменная» часто означает любую именованную величину независимо от того, меняется она или нет. В cplusplus.com переменная определяется как таковая: [«мы можем определить переменную как часть памяти для хранения определенного значения»] (http://www.cplusplus.com/doc/tutorial/variables/) .. . Вряд ли что-либо говорит о том, меняется ли что-то. Семантически говоря, на английском языке это либо переменная, либо константа, но в программировании lingo на самом деле это не оксюморон, чтобы сказать «постоянная переменная». – Kiril

ответ

8

Нет, в ClassLoader имеется только один экземпляр статической переменной.

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

Однако важно понимать, что это не означает, что значение автоматически синхронизируется. Если потоки меняют это значение, тогда это должно быть synchronized, иначе они могут видеть разные значения в соответствии с условиями гонки.

+0

Эти переменные являются окончательными, поэтому я не беспокоюсь об этом. Думаю, это намекает на другую проблему с памятью. –

+0

@ DanQ Не думал так, но это было для потомков. – Gray

1

Статические переменные явно не распределены в зависимости от количества потоков. Вместо этого статические переменные выделяются один раз внутри класса ClassLoader.

0

Если вы используете «огромное» количество памяти, например. многие GB, я бы использовал профилировщик памяти, чтобы найти причину и исправить ее, если можно. Если вы используете несколько сотен МБ, я бы не стал беспокоиться об этом, если вы не знаете, что это проблема.