Объем системных свойств Java

Это не так.

Две фундаментальные проблемы с глобальными переменными - это просто загромождение пространства имен и тот факт, что «никто» не «контролирует» их (таким образом, потенциальные коллизии и конфликты с несколькими потоками).

«Глобальность плоха», как и почти любая другая компьютерная программа, является руководством, а не жестким и быстрым правилом. Когда создаются такие «правила», лучше всего просто принять правило наизусть, чтобы понять обстоятельства и мотивы создания правила. Не принимайте их вслепую.

В вашем случае вы, похоже, поняли природу вашей системы и аргументы вокруг правила и решили, что в этом случае оно не применимо. Вы правы, это не так.

Так что, не беспокойтесь об этом.

47
задан user207421 27 July 2017 в 05:34
поделиться

5 ответов

У меня работает ....

Я должен добавить, что это результаты использования Sun JRE 1.6.0_12, и это поведение не определено, по крайней мере, в спецификациях API (или мне не удалось его найти), поведение может отличаться.

Существуют ли какие-либо инструменты для отслеживания изменений времени выполнения

Насколько мне известно, нет. Однако, если нужно проверить, были ли изменения в свойствах системы, можно одновременно сохранить копию Properties и сравнить ее с другим вызовом System.getProperties - в конце концов, Properties является подклассом Hashtable , поэтому сравнение будет выполняться аналогичным образом.

Ниже приведена программа, которая демонстрирует способ проверки наличия произошли изменения в свойствах системы. Наверное, не изящный метод, но, похоже, он выполняет свою работу: потоки могут использовать одно Свойства объект без необходимости внешнего синхронизация., Сериализованная форма

43
ответ дан 26 November 2019 в 19:50
поделиться

На каждую виртуальную машину приходится одна копия свойств. У них почти те же проблемы, что и у других статиков (включая синглтоны).

Я предполагаю, что в качестве хака вы вызываете System.setProperties к версии Properties , которая реагирует по-разному в зависимости в контексте (поток, стек вызовов, время суток и т. д.). Он также может регистрировать любые изменения с помощью System.setProperty . Вы также можете установить SecurityManager журналы проверки безопасности для соответствующих разрешений.

4
ответ дан 26 November 2019 в 19:50
поделиться

Да, «системные свойства» относятся к каждой виртуальной машине (хотя существует ряд «магических» свойств, которые содержат информацию о хост-системе, например: «os.name», «os. arch "и т. д.).

Что касается вашего второго вопроса: мне неизвестен такой инструмент, но если вас беспокоит изменение свойств системы, вы можете использовать специальный SecurityManager для предотвращения (и, возможно, даже отслеживать) изменения свойств системы.

3
ответ дан 26 November 2019 в 19:50
поделиться

Их область действия - запущенная JVM, но если у вас нет какого-либо эзотерического загрузчика классов, статическая переменная с объектом свойств будет делать то же самое, и с возможностью синхронизировать или делать все, что вы потребность.

3
ответ дан 26 November 2019 в 19:50
поделиться

Вы не говорите, какова ваша мотивация для использования системных свойств.

Мы используем Spring для нашей конфигурации и устанавливаем начальные свойства с помощью файла свойств, который вводится в XML. Изменения в конфигурации во время работы приложения выполняются с помощью JMX.

Конечно же, существует множество других способов изменить конфигурацию в Java с помощью файла свойств, конфигурации на основе xml и т. Д.

0
ответ дан 26 November 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: