Практические ограничения памяти JVM и использования процессора? - PullRequest
12 голосов
/ 12 июля 2011

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

Цель состоит в том, чтобы Java-программа работала как можно быстрее, без необходимости подкачки или перехода на диск .

Допустим, этот компьютер имеет:

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

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 12 июля 2011

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

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

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

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

Кстати: у меня есть опыт работы только с JVM размером до 40 ГБ.

1 голос
/ 12 июля 2011

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

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

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

...