Реальные различия между "java -server" и "java -client"? - PullRequest
372 голосов
/ 13 октября 2008

Есть ли реальная практическая разница между "java -server" и "java -client"?

Все, что я могу найти на сайте Sun, расплывчато

"- сервер запускается медленнее, но должен работать быстрее".

Каковы реальные различия? (В настоящее время используется JDK 1.6.0_07.)

Ответы [ 11 ]

1 голос
/ 22 марта 2013

В прошлый раз, когда я взглянул на это (и по общему признанию, это было некоторое время назад), самое большое различие, которое я заметил, было в сборке мусора.

IIRC:

  • Виртуальная куча сервера имеет различное число поколений, чем виртуальная машина клиента, и другой алгоритм сбора мусора. Это может быть не так больше
  • Виртуальная машина сервера выделит память и не освободит ее для ОС
  • Виртуальная машина сервера будет использовать более сложные алгоритмы оптимизации, и, следовательно, для оптимизации потребуется больше времени и памяти

Если вы можете сравнить две виртуальные машины Java, один клиент и один сервер с помощью инструмента jvisualvm , вы должны увидеть разницу в частоте и эффективности сбора мусора, а также в количество поколений.

У меня была пара скриншотов, которые действительно хорошо показали разницу, но я не могу воспроизвести, поскольку у меня есть 64-битная JVM, которая реализует только виртуальную машину сервера. (И я не могу быть обеспокоен, чтобы загрузить и изменить 32-битную версию в моей системе.)

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

...