Как Java VM выделяет память? - PullRequest
3 голосов
/ 06 марта 2011

Мне интересно, как Java VM выделяет память?JAVA выделяет память в физической памяти на нашем компьютере?Сейчас я пытаюсь сравнить две структуры данных: связанный список и массив с осторожностью с точки зрения ошибок страниц и попаданий в кеш, чтобы увидеть производительность каждой структуры данных на действительно низком уровне (жесткий диск, память, уровень кеша)

Ответы [ 2 ]

5 голосов
/ 06 марта 2011

Я не знаю, отвечает ли это на ваш вопрос, но IBM имеет хорошую статью о том, как JVM использует собственную память в Windows / Linux.

1 голос
/ 06 марта 2011

Java выделяет непрерывную память из ОС при запуске.Как только у него есть память, необходимая для кучи, он контролирует, как выделяется память.

Память в Java выделяется непрерывно, поэтому весьма вероятно, что каждый объект появится в памяти в том порядке, в котором он был выделен.(Но это не гарантируется) Кроме того, если объект сохраняется в небольшой коллекции, он, вероятно, будет скопирован в порядке обнаружения объектов.(опять же не гарантировано)

Лично я бы использовал ArrayList, если вы ожидаете произвольного доступа, и LinkedList, если вы хотите вставить куда-либо, кроме конца списка.

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

...