자바의 두 VM 요약: 서버와 클라이언트
--------------------------------------------------------------------나 자신에게서----------------------------------------------------------------------- 현재 64비트만 서버 모드를 지원합니다
서버 VM은 클라이언트 VM보다 약 10% 느리게 시작합니다.클라이언트 VM보다 최소 10배 더 빠르게 실행됩니다; 서버의 CPU, 메모리, 하드 디스크가 클라이언트 기기보다 더 강력하기 때문에, 프로그램이 배포된 후에는 더 나은 성능을 위해 서버 모드로 시작해야 합니다. JVM은 클라이언트 모드에서 기본적으로 1M, -Xmx에서는 64M입니다. JVM은 서버 모드에서 기본적으로 128M, -Xmx에서는 1024M입니다.
server:启动慢,编译更完全,编译器是自适应编译器,效率高,针对服务端应用优化,在服务器环境中最大化程序执行速度而设计。
client:快速启动,内存占用少,编译快,针对桌面应用程序优化,为在客户端环境中减少启动时间而优化; GC 소개: 클라이언 모드에서는 신세대가 직렬 GC를, 구 세대가 직렬 GC를 선택한다 서버 모드에서는 신세대가 병렬 재활용 GC를, 구세대는 병렬 GC를 선택합니다 일반적으로 시스템 애플리케이션을 선택하는 방법은 처리량 우선순위와 일시정지 시간 우선순위이며, 처리량 우선순위는 서버의 기본 병렬 GC 모드를, 일시정지 우선순위는 동시 GC(CMS) 모드를 선택합니다.
--------------------------------------------------------------------브라우저에서------------------------------------------------------------------------- JDK는 VM 클라이언트와 VM 서버 애플리케이션 두 가지 유형의 VM을 가지고 있습니다. 두 솔루션은 자바 런타임의 핫스팟 코드베이스를 공유하지만, 클라이언트와 서버 모두의 고유한 성능 특성을 위해 서로 다른 컴파일러를 사용하며, 이러한 차이점에는 인라인 정책 작성과 힙 기본값 작성이 포함됩니다.
서버와 클라이언트 VM은 유사하지만, 서버 VM은 최대 최대 운영 속도를 위해 특별히 조정되었습니다. 이는 빠른 시작 시간이나 작은 런타임 메모리 사용량을 넘어 가장 빠른 실행 속도를 요구하는 장시간 실행 서버 애플리케이션을 실행하도록 설계되었습니다.
고객 VM 컴파일러는 이전 버전의 JDK를 통해 클래식 가상 머신과 실시간 업그레이드(JIT)에서 사용되는 컴파일러입니다. 클라이언트 가상 머신은 애플리케이션과 애플릿 실행에 향상된 성능을 제공합니다. Java 가상 머신의 핫스팟 고객은 애플리케이션 시작 시간과 메모리 사용량을 줄이도록 특별히 조정되어 고객 환경에 적합하게 만듭니다. 일반적으로 클라이언트 시스템은 더 나은 그래픽 사용자 인터페이스를 갖추고 있습니다.
그래서 진짜 차이는 컴파일러 수준에서도 나타납니다:
클라이언트 가상 머신 컴파일러는 서버 가상 머신에서 컴파일러가 수행하는 더 복잡한 최적화를 시도하지 않지만, 교환 과정에서 코드 분석과 컴파일에 소요되는 시간이 줄어듭니다. 즉, 클라이언트 가상 머신은 더 빠르게 시작할 수 있고 메모리 사용량도 적게 듭니다.
서버 가상 머신에는 동일한 유형의 C++ 컴파일러 최적화뿐만 아니라 전통적인 컴파일러로는 할 수 없는 공격적인 인라인 인 가상 메서드 호출 같은 최적화도 지원하는 고급 적응형 컴파일러가 포함되어 있습니다. 경쟁과 성능 우위를 점하는 정적 컴파일러입니다. 적응 최적화 기법은 접근 방식이 매우 유연하며, 종종 고급 정적 분석과 컴파일 기법보다 더 뛰어난 성능을 보입니다.
-Server 모드가 시작되면 속도는 느리지만, 실행되면 성능이 크게 향상됩니다. 왜냐하면 가상 머신이 -클라이언트 모드일 때는 C1이라는 코드명으로 된 경량 컴파일러를 사용하고, -서버 모드에서 시작된 가상 머신은 코드명 C2인 컴파일러를 사용하는데, 이 컴파일러는 C1 컴파일러보다 비교적 철저하게 컴파일되어 서비스 후 성능이 더 좋습니다.
일반적으로, -server KNOWN과 -client KNOWN의 두 구성 순서를 변경하기만 하면,기본 설정은 서버와 클라이언트 폴더가 모두 JAVA_HOME의 /jre/bin 디렉터리에 존재한다는 것입니다각 JVM에 대응합니다
|