Это - действительно вопрос вкуса. Классы фабрики могут быть абстрагированы/соединены интерфейсом далеко по мере необходимости, тогда как методы фабрики являются более легким весом (и также будьте склонны быть тестируемыми, так как у них нет определенного типа, но они потребуют известной регистрационной точки, сродни сервисному локатору, но для определения местоположения методов фабрики).
Вы можете сделать
System.out.println(System.getProperty("java.vm.name"));
Что на моем машина возвращает либо:
Клиентская виртуальная машина Java HotSpot (TM)
, либо
Java HotSpot (TM) 64-разрядная серверная виртуальная машина
. Конечно, вы не должны делать ничего критического на основе этого значения, так как оно вероятно, изменится в будущем и будет совершенно другим на другой JVM.
У меня был очень похожий вопрос , который я задавал на ServerFault . Я бы сказал, если вам интересно, какая версия запущена, всегда используйте -client или -server.
Что ж, если вы явно начинаете с приглашения командной строки -server, вы работаете в режиме сервера. Вы можете проверить это следующим образом:
ManagementFactory.getRuntimeMXBean().getInputArguments();
Вы можете посмотреть RuntimeMXBean , который может открыть дополнительную информацию, но ее нужно будет протестировать на конкретной JVM, которую вы используете.
Без написания ни одной строчки кода, если вы используете JConsole для подключения к JVM, на вкладке «Сводка виртуальной машины» должно быть указано, какой именно (сервер или клиент ) Виртуальная машина находится под наблюдением.
Например,
Виртуальная машина: OpenJDK Server VM версии 1.6.0-b09
Для удаленного мониторинга JVM с помощью JConsole просто включите агент JMX (Java Management Extensions), запустив JVM со следующими свойствами системы
> java.rmi.server.hostname=[your server IP/Name] // without this, on linux, jconsole will fail to connect to the remote server where JVM is running
> com.sun.management.jmxremote.authenticate=false
> com.sun.management.jmxremote.ssl=false
> com.sun.management.jmxremote.port=[portNum]