Подтвердить что ты не робот

Практические ограничения использования памяти JVM и использования ЦП?

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

Целью было бы сделать программу Java запущенной как можно быстрее без необходимости менять или переходить на диск для чего-либо.

Скажем, что этот компьютер имеет:

  • 1 ТБ ОЗУ (64 16 ГБ DIMM)
  • 64 процессорных ядра (8 8-ядерных процессоров)
  • работает 64-разрядный Ubuntu

Может ли один экземпляр java-программы, запущенной в JVM, воспользоваться этим большим количеством ОЗУ и процессоров?

Существуют ли какие-либо практические соображения, которые могут ограничить использование и эффективность?

  • Ограничения ОС (память и потоки)?
  • Ограничения памяти/кучи JVM?
  • Ограничения потока JVM?

Спасибо, Гален

4b9b3361

Ответ 1

Один экземпляр может попытаться получить доступ ко всей памяти, однако области NUMA означают, что такие вещи, как GC, плохо работают с памятью в другом регионе. Это происходит быстрее, и JVM поддерживает некоторую поддержку NUMA, но для улучшения масштабируемости ее необходимо улучшить. Даже при этом вы можете получить 256 МБ кучи и использовать 700 собственных/прямых памяти без этой проблемы.;)

Самое большое ограничение, если у вас много загрузок, состоит в том, что массивы, коллекции и ByteBuffer (для файлов с отображением памяти) ограничены размером 2 миллиарда. (2 ^ 31-1)

Вы можете обойти эти проблемы с пользовательскими коллекциями, но на самом деле Java должна поддерживать IMHO.

BTW: вы можете купить Dell R910 с 1 ТБ памяти и 24 ядра /48 потоков с Ubuntu за £ 40 тыс.

BTW: У меня есть только опыт JVM размером до 40 ГБ.

Ответ 2

Прежде всего, сама программа Java: плохо разработанный код не будет использовать такую ​​мощь компьютера. Плохо реализованные потоки, например, могут замедлить работу.

ОС также является ограничивающим фактором: не все ОС хорошо справляются с этим объемом памяти.

Я думаю, что JVM может справиться с этим объемом памяти, поскольку ОС поддерживает его.