JVM ведет себя так же, как и любой другой процесс, работающий в ядре.Когда JVM требуется пространство кучи, она запрашивает память через вызов библиотеки malloc, который, в свою очередь, использует системный вызов (brk, sbrk или mmap) для выделения пространства с использованием системы виртуальной памяти ОС.Вне зависимости от того, включает ли это подкачку для свопинга, это не имеет отношения к JVM, оно просто запрашивает пространство и оставляет детали до подсистемы ОС VM.
С точки зрения производительности важно помнить об этомпри настройке вашей JVM.Хотя вы можете сделать кучу больше, чем физическая память вашей машины, она будет работать хуже, чем если куча меньше физической памяти.Это является результатом действия по подкачке, которое должно произойти, как только куча превысит физическую память.
Помимо этого, у Азула (на которого я работаю) есть JVM под названием Zing, которая делает вещи немного по-другому.Вместо того, чтобы использовать подсистему Linux VM, у нас есть собственное программное обеспечение уровня ядра (называемое Zing System Tools или ZST).Это позволяет нам обрабатывать виртуальную память специфичным для JVM способом, а не универсальным способом, как это делает Linux.Память может быть возвращена из JVM в ZST, когда она не используется, строки кэша могут быть более оптимизированы, и у нас также есть возможность разрешить JVM превышать настроенный размер кучи, чтобы предотвратить ошибку OOM.