4

У меня есть ноутбук с Windows 7 x64 с гостевой виртуальной машиной Windows XP x32, установленной с помощью VirtualBox. Однажды я запустил приложение на госте и обнаружил, что оно работает заметно быстрее, чем на хосте. С чего бы это?

2 ответа2

4

Поскольку вы упоминаете Java, какая версия вашей JVM и работает ли она в 32-битном или 64-битном режиме на хосте?

Сжатый Упс

"Упс", или обычный указатель объекта на языке Java Hotspot, является управляемым указателем на объект. Oop обычно имеет тот же размер, что и собственный указатель компьютера, что означает 64 бита в системе LP64. В системе ILP32 максимальный размер кучи составляет несколько менее 4 гигабайт, что недостаточно для многих приложений. В системе LP64 куча, используемая данной программой, может быть примерно в 1,5 раза больше, чем при работе в системе ILP32. Это требование связано с расширенным размером управляемых указателей. Память стоит недорого, но в наши дни пропускная способность и кэш ограничены, поэтому нежелательно значительно увеличивать размер кучи и получать только более 4 ГБ.

Управляемые указатели в куче Java указывают на объекты, которые выровнены по 8-байтовым границам адресов. Сжатые операции представляют управляемые указатели (во многих, но не во всех местах в программном обеспечении JVM) как 32-битные смещения объектов из 64-битного базового адреса кучи Java. Поскольку это смещения объектов, а не смещения байтов, их можно использовать для адресации до четырех миллиардов объектов (не байтов) или размера кучи до 32 гигабайт. Чтобы использовать их, они должны быть масштабированы в 8 раз и добавлены к базовому адресу кучи Java, чтобы найти объект, к которому они относятся. Размеры объектов, использующих сжатые значения, сравнимы с размерами в режиме ILP32.

Термин декодирование используется для выражения операции, с помощью которой 32-разрядный сжатый параметр преобразуется в 64-разрядный собственный адрес в управляемую кучу. Обратная операция называется кодированием.

Сжатый упс поддерживается и включается по умолчанию в Java SE 6u23 и более поздних версиях. В Java SE 7 использование сжатых опций является значением по умолчанию для 64-битных процессов JVM, когда -Xmx не указан и для значений -Xmx менее 32 гигабайт. Для JDK 6 до выпуска 6u23 используйте флаг -XX:+UseCompressedOops с командой java, чтобы включить эту функцию.

Большой объем памяти 64-битных JVM имеет очень существенное влияние на производительность.

3

Приложения могут работать быстрее в ВМ из-за кэширования. Поскольку виртуальные машины хранят свои диски в файлах, операционная система хоста может кэшировать эти файлы в оперативной памяти, и они будут работать заметно быстрее. Реальная разница между 32-битными и 64-битными приложениями составляет несколько процентов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .