В Java являются статические участники класса общими для программами?

Похоже, что стандартное представление ошибки 404 в vendor/ изменило в Laravel 5.8 с иллюстрированного макета на минимальный макет, возможно, для менее самоуверенного по умолчанию.

Я рекомендую создать свой собственный вид в разделе resources/views/errors/404.blade.php, если вы хотите вернуть предыдущий вид. Вы можете скопировать иллюстрированный вид непосредственно из версии 5.7, если это то, что вы хотели отобразить: https://github.com/laravel/framework/blob/5.7/src/Illuminate/Foundation/Exceptions/views/404. blade.php

18
задан Premraj 14 September 2016 в 13:52
поделиться

7 ответов

В Java являются статические участники класса общими для программами?

Класс определяется его полным именем и загрузчиком класса, который загрузил его. Если тот же класс в рамках того же процесса JVM, и эти две программы загрузили класс через тот же загрузчик класса затем, статические участники совместно используются. Правила Classloading имеют экстремальное значение.

Я предполагаю, что не, они не, потому что каждый процесс имеет свое собственное пространство памяти, конечно.

При использовании двух отдельных JVMs для запуска двух приложений, Вы корректны. Но возьмите случай контейнеров приложения/сервлета, таких как кот: они загружают несколько приложений посредством того же процесса (хост-процесс кота).

Но как целая вещь JVM на самом деле работает? Существует ли отдельная JVM в отдельном процессе для каждой программы Java, которую я запускаю? Программы Java, работающие в системе, совместно используют что-нибудь вообще?

Каждый раз Вы вводите >java -cp... в командной строке Вы создаете новый процесс. Примите во внимание что, когда Вы выполните затмение или назовете муравья задачей Java с fork=true Вы также создаете новые процессы.

Есть ли различия между реализациями JVM и OSs? Я могу заставить программы совместно использовать переменные (т.е. непосредственно через JVM, а не обычные механизмы IPC)? Есть ли более экзотические JVMs с одним процессом для особых целей?

Как сказанный плакат, существуют проекты как Terracota, которые упрощают это для Вас. Общий подход для этого вида совместного использования является распределенным кэшем.

27
ответ дан 30 November 2019 в 06:39
поделиться

Нет, статические переменные не между JVMs. Да, существует отдельный процесс JVM для каждого приложения Java, которое Вы запускаете.

В некоторых реализациях я полагаю, что они могут совместно использовать некоторые ресурсы (например, память для кода JITted классов JRE), но я не уверен. Я полагаю, что существует продолжающаяся работа для включения большего количества совместного использования, но все еще устойчивым способом. (Вы действительно не хотите, чтобы одна JVM, отказывающая, влияла на других.)

Нет, Вы не можете заставить программы совместно использовать переменные прозрачно.

Я полагаю, что существуют книги о JVM, но я не могу рекомендовать никому. Вы, вероятно, были бы лучшими от поиска отчетов HotSpot для деталей этого. Этот - довольно хорошая начальная точка.

8
ответ дан 30 November 2019 в 06:39
поделиться

Зависит от реализации, но да там способы, которыми совместно используются вещи. Существует работа в стадии реализации для изменения этого, и Sun (через Apple) сделал большую работу в обмене данными между экземплярами VM. Существует ссылка, которая обсуждает часть этого здесь.

Чтобы сделать любой вид совместного использования требует, чтобы конструктор VM сделал это, Вы как программист не можете сделать ничего, чтобы заставить его произойти.

Спецификация VM здесь, существуют некоторые (более старые) книги об этом также. Можно также посмотреть на источник для Kaffe, который является довольно небольшим.

2
ответ дан 30 November 2019 в 06:39
поделиться

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

Различные потоки на том же VM могут иметь свой собственный статический класс nember экземпляры, если они использовали отдельные загрузчики класса.

Классическим примером здесь был бы Tomcat Apache, разделяющий различные веб-приложения, хотя банки lib могли бы быть характерны для всех приложений.

6
ответ дан 30 November 2019 в 06:39
поделиться

Если Вы хотите совместно использовать переменные через JVMs, Вы могли бы посмотреть на кластеризирующиеся продукты как Терракота. Они называют себя присоединенной памятью "сети" и позвольте Вам совместно использовать ссылки на объект через JVMs, использующий технологию репликации.

2
ответ дан 30 November 2019 в 06:39
поделиться

Вы корректны в своем предположении. Да, каждая JVM является отдельным процессом. Можно подтвердить это путем открытия Task Manager, когда Вы запускаете две программы Java (процессы вида по имени, и ищите java.exe или javaw.exe).

Возможно заставить JVMs соединиться друг с другом (с локальными сокетами, например), но нет ничего, встроил.

1
ответ дан 30 November 2019 в 06:39
поделиться

Только, чтобы последовать к тому, что упомянутый Kevin, нет никаких реализаций JVM, о которых я знаю, которые позволяют Вам совместно использовать статические переменные через экземпляры JVM. Как предыдущие ответы указали (правильно) - каждый экземпляр JVM является своим собственным процессом.

Терракота (который является кластеризирующейся технологией, не JVM) допускает произвольное совместное использование экземпляров объектов через границы процесса JVM - включая совместное использование статических переменных. Таким образом моникер "сеть присоединил память". Во всех отношениях, при использовании Терракотовой технологии в процессе JVM, все потоки во всех VMs ведут себя, как будто они все смотрели на единственную, большую, общую "кучу". (С протестами, конечно, так как это не физически возможно, Терракотовое, управляет им через сложные алгоритмы совместного использования и репликации, которые включают сеть io для перемещения данных - поэтому существуют времена, когда задержка и пропускная способность не выдержат сравнение с собственным доступом к памяти),

Существуют богатые примеры в разделе Cookbook Терракотового сайта - я рекомендую начать с Привет Кластеризованного Рецепта Экземпляра получать ощущение того, как это работает.

1
ответ дан 30 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

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