В прошлый раз, когда я взглянул на это (и по общему признанию, это было некоторое время назад), самое большое различие, которое я заметил, было в сборке мусора.
IIRC:
- Виртуальная куча сервера имеет различное число поколений, чем виртуальная машина клиента, и другой алгоритм сбора мусора. Это может быть не так больше
- Виртуальная машина сервера выделит память и не освободит ее для ОС
- Виртуальная машина сервера будет использовать более сложные алгоритмы оптимизации, и, следовательно, для оптимизации потребуется больше времени и памяти
Если вы можете сравнить две виртуальные машины Java, один клиент и один сервер с помощью инструмента jvisualvm , вы должны увидеть разницу в частоте и эффективности сбора мусора, а также в количество поколений.
У меня была пара скриншотов, которые действительно хорошо показали разницу, но я не могу воспроизвести, поскольку у меня есть 64-битная JVM, которая реализует только виртуальную машину сервера. (И я не могу быть обеспокоен, чтобы загрузить и изменить 32-битную версию в моей системе.)
Похоже, что это больше не так, попробовав запустить некоторый код в Windows как с серверной, так и с клиентской виртуальной машиной, я, похоже, получаю одну и ту же модель генерации для обоих ...