단일 스레드는 다중 스레드 응용 프로그램과 관련된 많은 복잡성을 제거합니다.단일 스레드 응용 프로그램에 대한 GC 설정
단일 스레드 응용 프로그램을 활용할 수있는 가비지 수집기 구성이 있는지 궁금합니다.
은 지금 나는 UseConcMarkSweepGC를 사용하고, incrementalMode GC 자바 런타임 환경이 빌드에 설정 : 자바 1.6.0_22-B04
단일 스레드는 다중 스레드 응용 프로그램과 관련된 많은 복잡성을 제거합니다.단일 스레드 응용 프로그램에 대한 GC 설정
단일 스레드 응용 프로그램을 활용할 수있는 가비지 수집기 구성이 있는지 궁금합니다.
은 지금 나는 UseConcMarkSweepGC를 사용하고, incrementalMode GC 자바 런타임 환경이 빌드에 설정 : 자바 1.6.0_22-B04
를 JVM이 단일 스레드 시스템에서 시작되는 경우, 그것은 복잡한 메모리 장벽을 사용하지 않습니다 따라서 CPU주기를 절약 할 수 있습니다.
그러나 JVM은 본질적으로 다중 스레드입니다. 단 하나의 스레드가 있어도 JVM을 지원하는 다른 스레드가 여전히 있습니다.
대답은이 아니므로 단일 스레드 응용 프로그램에 최적화 된 GC 알고리즘이 없습니다.
JVM 스레드가 존재할 것이라는 점에 동의합니다 (최소한 비 GUI 일 경우 메인). 그러나 대부분의 동작은 사용자 스레드에 있습니다. a – tgkprog
@tgkprog GC 튜닝은 각 애플리케이션에 대해 개별적이며 멀티 스레드되는 것은 중요한 요소가 아닙니다. GC 튜닝에 대한 도움을 받으려면 달성하려는 GC 로그 및 상태 목표를 게시하십시오 (예 : 최대 일시 중지 기간) –
GC 전략은 애플리케이션을 어떻게 코딩 했는가에 달려 있지 않지만 보유한 하드웨어에 따라 다릅니다. 사용 가능한 하나 개의 CPU가있는 경우
예를 들어, 당신은 두 가지 이유로 CMS를 사용해서는 안 : 당신이 STW을 가지게됩니다
그런 경우 SerialGC (또는 ParallelGC, 단일 CPU 컴퓨터에서는 문제가되지 않음)를 활성화해야합니다. 사용 가능한 N
코어를 가지고 있지만 응용 프로그램이 하나 사용하는 경우 JVM이 하드웨어의 최대한 활용하도록
이제, 당신은 -XX:ConcGCThreads=N-1
및 -XX:ParallelGCThreads=N-1
(사용하는 GC에 따라)을 설정할 수 있습니다.
플래그를 설정하기 전에 -Xloggc:gc.log -XX:+PrintGCDetails
을 사용하여 GC 로그를 사용하도록 설정하고 각 새 구성 후에 애플리케이션 응답 시간/처리량을 향상시켜야합니다.
정말 다른 점이 있을까요? GC 튜닝은 응용 프로그램에 따라 다르며 스레딩은 반드시 관련이 없습니다. 현재 GC에 문제가 있습니까? 어떤 문제들? 개체 모델은 어떻게 생겼습니까? etc ...이 모든 것들은 단일 스레드 대 다중 스레드보다 훨씬 중요합니다. – Taylor
@Taylor 문제점 : 프로파일 링을 수행하면 많은 끈이 생성 된 힙이 생성됩니다. 나는 ParallelGCThreads를 증가 시키면 CMS가 ConcurrentMarkingPhase 동안 응용 프로그램 대신에 CPU가 전체를 소비하지만 GC 시간을 줄일 수 있다고 생각했다. 그래서 단일 스레드 애플 리케이션이 바로 문제가 될 수 있을까요? 이 생각의 줄에는 단일 스레드 응용 프로그램에 적합한 좋은 설정이 있습니까? –
문자열이 필요합니까? 동일한 문자열이 다시 생성됩니까? 어쩌면 약한 참조 또는 자동 삭제 맵을 whirly와 같이 유지할 수 있습니까? – tgkprog