2015-03-03 2 views
3

Есть ли способ, чтобы разделить основную библиотеку между Java-процессами (или другим способом, чтобы свести к минимуму JVM первоначального влияния памяти)Доля библиотека ядра между Java процессами

Так вот мой случай. Я играю с микросервисами. Я использую их довольно много. Я устанавливаю их кучу для 128M, так как их достаточно. Но я заметил, что процесс Linux потребляет гораздо больше.

Если я правильно понял из here

Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss] 

хотя я использую Java 8, так, вероятно, не завивку размер больше не является проблемой? или это.

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

+1

Несмотря на благородный вопрос, у меня есть подозрение, что ответ будет «нет». – aruisdante

+0

Почему бы не разделить jvms среди разных микросервисов? –

+0

хорошо, один из плюсов их наличия в отдельных процессах заключается в том, что отказ одного (например, ошибки OOM) не повлияет на других. – keyer

ответ

0

Концептуально вы спрашиваете, можете ли вы fork JVM - поскольку forking (как правило) использует семантику памяти copy-on-write, это может быть эффективной мерой экономии пространства. К сожалению, как обсуждалось в this answer, разветвление JVM не поддерживается и вообще не практично. Не-Unix-системы не могут эффективно развиваться, и есть множество других побочных эффектов, которые разветвленная JVM должна была бы разрешиться беспорядочно. Теоретически вы, вероятно, могли бы разветвить процесс JVM, но вы бы прямо шли на территорию «неопределенного поведения».

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

Смежные вопросы