1

단일 스레드는 다중 스레드 응용 프로그램과 관련된 많은 복잡성을 제거합니다.단일 스레드 응용 프로그램에 대한 GC 설정

단일 스레드 응용 프로그램을 활용할 수있는 가비지 수집기 구성이 있는지 궁금합니다.

은 지금 나는 UseConcMarkSweepGC를 사용하고, incrementalMode GC 자바 런타임 환경이 빌드에 설정 : 자바 1.6.0_22-B04

+0

정말 다른 점이 있을까요? GC 튜닝은 응용 프로그램에 따라 다르며 스레딩은 반드시 관련이 없습니다. 현재 GC에 문제가 있습니까? 어떤 문제들? 개체 모델은 어떻게 생겼습니까? etc ...이 모든 것들은 단일 스레드 대 다중 스레드보다 훨씬 중요합니다. – Taylor

+0

@Taylor 문제점 : 프로파일 링을 수행하면 많은 끈이 생성 된 힙이 생성됩니다. 나는 ParallelGCThreads를 증가 시키면 CMS가 ConcurrentMarkingPhase 동안 응용 프로그램 대신에 CPU가 전체를 소비하지만 GC 시간을 줄일 수 있다고 생각했다. 그래서 단일 스레드 애플 리케이션이 바로 문제가 될 수 있을까요? 이 생각의 줄에는 단일 스레드 응용 프로그램에 적합한 좋은 설정이 있습니까? –

+0

문자열이 필요합니까? 동일한 문자열이 다시 생성됩니까? 어쩌면 약한 참조 또는 자동 삭제 맵을 whirly와 같이 유지할 수 있습니까? – tgkprog

답변

1

를 JVM이 단일 스레드 시스템에서 시작되는 경우, 그것은 복잡한 메모리 장벽을 사용하지 않습니다 따라서 CPU주기를 절약 할 수 있습니다.

그러나 JVM은 본질적으로 다중 스레드입니다. 단 하나의 스레드가 있어도 JVM을 지원하는 다른 스레드가 여전히 있습니다.

대답은이 아니므로 단일 스레드 응용 프로그램에 최적화 된 GC 알고리즘이 없습니다.

+0

JVM 스레드가 존재할 것이라는 점에 동의합니다 (최소한 비 GUI 일 경우 메인). 그러나 대부분의 동작은 사용자 스레드에 있습니다. a – tgkprog

+0

@tgkprog GC 튜닝은 각 애플리케이션에 대해 개별적이며 멀티 스레드되는 것은 중요한 요소가 아닙니다. GC 튜닝에 대한 도움을 받으려면 달성하려는 GC 로그 및 상태 목표를 게시하십시오 (예 : 최대 일시 중지 기간) –

0

GC 전략은 애플리케이션을 어떻게 코딩 했는가에 달려 있지 않지만 보유한 하드웨어에 따라 다릅니다. 사용 가능한 하나 개의 CPU가있는 경우

예를 들어, 당신은 두 가지 이유로 CMS를 사용해서는 안 : 당신이 STW을 가지게됩니다

  • 는 응용 프로그램에서이 전용 CPU 시간을 훔치는 것입니다 일시 정지
  • 오버 헤드가 동시에 발생하여 응용 프로그램이 더 이상 중지됨을 의미합니다.

그런 경우 SerialGC (또는 ParallelGC, 단일 CPU 컴퓨터에서는 문제가되지 않음)를 활성화해야합니다. 사용 가능한 N 코어를 가지고 있지만 응용 프로그램이 하나 사용하는 경우 JVM이 하드웨어의 최대한 활용하도록

이제, 당신은 -XX:ConcGCThreads=N-1-XX:ParallelGCThreads=N-1 (사용하는 GC에 따라)을 설정할 수 있습니다.

플래그를 설정하기 전에 -Xloggc:gc.log -XX:+PrintGCDetails을 사용하여 GC 로그를 사용하도록 설정하고 각 새 구성 후에 애플리케이션 응답 시간/처리량을 향상시켜야합니다.

출처 : http://jvm-options.tech.xebia.fr/

관련 문제