2012-06-27 2 views
0

나는 JVM이 호더 (hoarder)라는 것을 알고있다. 그러나 이것은 나에게 충격적이다 : 시작시 180MB 사용 넷빈의 매우 기본적인 "Contact Editor"GUI와 몇 가지 기본적인 일반 인스턴스가 추가 되었는가?유휴 상태에서도 ~ 200MB를 사용하는 간단한 스윙 프로그램?

저는 1998 년 1 인칭 슈팅 게임을 제작하지 않았습니다. 나는이 커뮤니티에서 저를 깨우 치도록 SO 커뮤니티에 간청합니다. 여기에 JConsole의 인쇄 화면은 다음과 같습니다 또한

enter image description here

: 나는 죽지 않을 시작 18 개 스레드를 가지고있다. 항상 존재하는 초기 스레드와 Swing의 디스패치 스레드 외에 다른 스레드가 있습니까?

답변

1

스레드는 실제로 메모리 문제가 아닙니다 (18 개 중 절반은 IIRC 디버그 모드에 있기 때문입니다). AWT-Shutdown (모든 창을 처리 한 다음 JVM을 종료하는지 확인), AWT-Windows (OS에서 이벤트 가져 오기), Java2D 처리기 (이미지 데이터 정리).

실행중인 프로그램을 모르지만 Netbeans 플랫폼을 기반으로한다면 180MB가 아닌 추가 메모리가 필요합니다. 나는 대부분의 메모리가 사용되지 않았거나 (단지 예약 된) 또는 실제 데이터가 메모리를 차지하고있는 것 같아요. 비교를 위해

:

  • 라벨 만 ~ 2메가바이트 필요한 버튼과 간단한 JFrame의가 ( -Xmx2MB으로 실행 VisualVM과 그것이 8메가바이트는 64 비트 Windows에서 (최소) 예약이 보여하지만, < 2메가바이트 익숙한).
  • 복잡한 GUI 프로그램입니다. 라이브러리 (jars)의 70MB는 ~ 35MB (내 생각은 ~ 5-10MB 아이콘/이미지)이고 모든 기능 (거의 모든 라이브러리 코드가로드 됨)을 사용하면 이후입니다. GUI가 아닌 포함) ~ 100MB이지만 일부 데이터가 포함되어 있습니다.

내역 :

  1. java.awt.image.BufferedImage 번호 (156) 7.056.378
  2. java.awt.image.BufferedImage 번호 (415) 6.639.738
  3. sun.misc.Launcher $ AppClassLoader 1 3.386.545
  4. 클래스 com.ces.core.gui.help.WelcomeTab UI에 표시 627.256 (정지 화상 데이터 여기)
  5. 클래스 com.ces.util.resources.Translator 408.146 (기본적으로 모든 텍스트)
  6. sun.awt.AppContext # 1 389.760
  7. java.awt.image.BufferedImage 번호 (161) 326.120
  8. 절반 (큰 배경 이미지를 :)) 캐시 된 이미지처럼 보이는 정보 내가 INT를 왼쪽

[]/Object []/HashMap.동일한 데이터를 참조하는 항목 [])

사례를 보려면 app -> VisualVM -> Monitor -> 힙 덤프 -> 보존 된 크기로 가장 큰 x 개의 개체를 찾습니다.

1

나는 Contact Editor에 익숙하지 않지만 내장 된 데이터베이스 또는 에뮬레이터가 원인 일 수 있습니다. 내가 가장 좋아하는 JVM은 일반적인 Swing GUI를 위해 10 개의 스레드를 실행하지만 3 개만 활성화되며 아무 것도 실제로는 그렇지 않다. 이 example은 시각적으로 "사용중"인 program을 프로파일 링하며,이 example은 범위를 강조 표시하기 위해 인위적으로 작은 힙을 사용합니다.