2012-08-15 3 views
0

가비지 수집되기 전에 다양한 시간 동안 머무를 것으로 기대되는 개체를 사용하여 장기 실행 (여러 일) 응용 프로그램을 사용하고 있습니다. 사용자의주의 (1 초 < 18 시간) 어떤 세대에 어떤 개체가 있는지 분석하려면 어떻게해야합니까?

  • 매일 데이터 (~ 24 시간)
  • '영원'의 기간 동안

    1. 매우 짧은 수명 (< 1 초)
    2. 살아 :의 네 종류가있다 가정 해 봅시다 (매우 적은 수의 응용 프로그램 수명)

    튜닝을 돕기 위해 Java 6 핫스팟 VM을 사용하여 실제 데이터가 종전 세대에 들어가는 것을 확인하는 방법을 찾고 싶습니다. jmap을 사용하여 HPROF 파일을 생성하는 것은 세대 별 정보를 포함하지 않는 것 같습니다. 이 정보를 얻는 또 다른 방법이 있습니까?

  • 답변

    0

    아니요, 개별 개체에 대한 생성 정보를 얻는 간단한 방법은 없습니다. 실제로 "라이브"개체를 요청하면 Full GC가 실행되고 모든 개체가 구 세대에 배치됩니다 (이제는 모든 개체가있는 위치를 알 수 있지만 위치는 알 수 없습니다)

    살아남은 개체 전체 GC가 구세대에있을 가능성이 있으므로 시스템이 5 분마다 전체 GC를 수행하면 그보다 오래 지속되는 항목은 거의 동일합니다.

    가장 좋은 방법은 버려진 객체를 최소화하는 것입니다 (메모리 프로파일 러를 사용하여 도움을줍니다). GC 성능이 향상되고 발생 빈도가 줄어 듭니다. 극단적 인 예에서는 작업하기 어려운 힙 메모리를 사용할 수 있지만 힙이없는 메모리는 사용할 수 없습니다. esp는 많은 GB의 데이터를 가지고있는 경우에 유용합니다.

    +0

    Visual GC 플러그인이있는 VisualVM이 개별 세대의 사물의 크기를 표시한다고 가정 할 때 다른 방법이있을 수 있다고 생각했습니다. 그런 행운이 없습니까? – sharakan

    +0

    나는 알고 있지 않다. 나는 오버 헤드가 시스템을 교란시키는 용어로 인해 의미를 부여하기가 매우 어렵다고 생각합니다. –