이 문서에서 참조된 코드는 Epsilon GC에 관한 Oracle 블로그에서 사용할 수 있는 샘플 코드에서 가져온 것입니다.
이 기사에서는 Epsilon GC로 알려진 Java GC(가비지 수집)의 특히 흥미로운 옵션을 살펴봅니다. 이 가비지 수집 알고리즘은 가비지 수집을 수행하지 않는다는 독특한 특징으로 유명합니다. Epsilon GC(가비지 수집기)는 JDK 11에 포함되었습니다.
하지만 수집하지 않는 경우 가비지 수집기를 어떻게 사용합니까? (프리로더 허!!)
아니요, 실제로는 매우 유용합니다. Oracle 블로그에서 제공하는 사용 사례 중 하나입니다. 좀 더 유용하도록 약간 강화했습니다.
자세한 내용은 원본 블로그 게시물을 참조하세요.
https://blogs.oracle.com/javamagazine/post/epsilon-the-jdks-do-nothing-garbage-collector
사용 사례: Epsilon GC는 프로파일링 도구의 도움 없이 특정 코드 세그먼트에 대한 메모리 할당을 평가해야 하는 개발자에게 유용합니다.
주요 과제 기존의 가비지 수집기는 지속적으로 객체를 지워 정확한 메모리 사용량 측정항목을 모호하게 만들 수 있습니다. 이러한 간섭으로 인해 코드의 실제 메모리 소비량을 확인하기가 어렵습니다.
Epsilon GC는 비수집자 역할을 하여 이 문제를 해결합니다. 가비지 수집 알고리즘 자체는 아니지만 가비지 수집을 수행하지 않음으로써 메모리 할당을 이해하는 도구 역할을 하여 메모리 사용량에 대한 명확한 그림을 제공합니다.
참고: Epsilon GC는 메모리를 회수하지 않으므로 과도한 할당으로 인해 JVM에서 OutOfMemoryError(OOM)가 발생할 수 있다는 점에 유의하는 것이 중요합니다.
다음은 Epsilon GC의 효능을 입증하는 데 사용될 샘플 코드입니다.:
public class EpsilonDemo { public static String formatSize(long v) { if (v기대:
코드는 80MB의 바이트 유형 개체를 할당합니다. 코드를 실행할 때 print 문에서도 동일한 내용을 관찰할 수 있어야 합니다.이제 EpsilonGC 유무에 관계없이 컴파일된 버전을 실행하려면:
- G1GC로 실행:
java -Xms100m -Xmx100m -XX: UseG1GC EpsilonDemo Starting allocations... *** Free MEM = 102.2 MB Completed successfully *** Free MEM = 74.2 MB그래서 G1GC에서는 28MB 사용률에 대한 잘못된 할당 그림이 표시됩니다.
- EpsilonGC로 실행:
java -Xms100m -Xmx100m -XX: UnlockExperimentalVMOptions -XX: UseEpsilonGC EpsilonDemo [0.004s][warning][gc,init] Consider enabling -XX: AlwaysPreTouch to avoid memory commit hiccups Starting allocations... *** Free MEM = 99.4 MB Completed successfully *** Free MEM = 18.7 MB여기서 80.7MB의 사용률을 명확하게 확인할 수 있습니다.
EpsilonGC가 코드에서 메모리 사용 패턴을 찾아내는 데 얼마나 편리한지 이해하는 데 도움이 되기를 바랍니다. 건배! ?
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3