개요
이 글은 이 문서 전체에서 가장 오래 걸려 쓴 글이라고 해도 될 것이다(). 정확성을 위해 Windows와 Linux에서 성능 테스트를 잔뜩 했는데, 결과가 꽤 뜻밖이었다.
테스트의 세부 내용과 로그, 리포트, Spark, GCLog 등은 Test - Java에서 볼 수 있다.
Java 선택
섹션 제목: “Java 선택”flowchart TD
A[선택]
A --> Java8
A --> Java11
A --> Java21
Java8 --> Dragonwell
Java11 --> Dragonwell
Java21 --> Windows
Windows --> M1[메모리 충분]
M1 --> C[GraalVM Enterprise Edition]
Windows --> M2[메모리 부족]
M2 --> Semeru
Java21 --> Linux
Linux --> M2
Linux --> D[메모리 충분]
D --> F[높은 호환성]
F -->|필요| C
F -->|불필요, 실력이 있다면| E[Azul Zing]
다운로드
섹션 제목: “다운로드”Azul Zulu는 Java 8 이상을 지원한다. Java 7과 6은 고객이 되어야 받을 수 있다.
GraalVM은 Community Edition(CE)과 Enterprise Edition(EE)으로 나뉜다. Oracle이 찾아올 만큼 서버가 크지 않다면 Enterprise Edition을 고르자.
최신 버전, 즉 Java 25를 추천한다.
Alibaba Dragonwell은 Standard Edition과 Extended Edition으로 나뉜다. Extended Edition을 추천한다.
OpenJ9에는 인증판과 비인증판이 있는데, OpenJ9와 운영체제의 관계 때문에 라이선스가 다를 뿐 코드는 같다. 그냥 IBM Semeru Runtime Open Edition을 받으면 된다.
Azul Zing은 공개 다운로드를 제공하지 않는다. 서버 성능이 현재 JDK의 한계에 막혀 있다는 것이 확실하다면 체험판 신청서를 제출해 볼 수 있다.
가비지 컬렉터
섹션 제목: “가비지 컬렉터”여러 번 테스트해 본 결과, MC 서버에는 G1GC와 ZGC가 가장 잘 맞는다(Zing의 C4도 있다).
골라 보자!
flowchart TD
A[선택]
A --> B[머신 사양 충분, 최소 4코어 8GB, 권장 8코어 8GB]
A --> L[머신 사양 미달] --> G1
B --> C[Java 21+ 또는 Dragonwell 11] --> ZGC
B --> O[그 외] --> G1
ZGC는 멈춤이 거의 없어 플레이어에게 더 좋은 경험을 주고, 멀티코어도 더 잘 활용한다.
GC 세부 최적화는 각 Java의 최적화 가이드를 읽어 보자.