2011-09-11 9 views
8

나는 테스트 프로그램을 쓰고 있어요 : JFrame을 삭제하면 메모리 누수가 발생합니까? 다음과 같이

  1. 사용자가 버튼 A를 클릭

    , 그것은 50 JFrames을 엽니 다. 사용자가 버튼 B를 클릭하면
  2. 그것을 난이 작업 관리자를 이용하여 결정되는 메모리 B 버튼을 클릭 한 후 저하되지 않는 것을 발견 버튼 A.

을 클릭하여 도시 된 모든 JFrames를 처분, CTRL + alt + del Windows에서 "java"의 메모리 사용을 확인하십시오.

+0

일부 코드는 분명히 도움이 될 것입니다 ... –

+1

[런타임시 최상위 컨테이너 제거] (http://stackoverflow.com/questions/6309407/remove-top-level-container-on-rvel-container-on-rvel-container-on-run-time/6310284#)를 참조하십시오. 6310284). – trashgod

+1

내 코드는 특별한 것이 아닙니다. 새 JFrame으로 JFrame 만들기. dispose()를 호출하여 처리합니다. – Bear

답변

11

, 방법, 할 수없는 것을 해결할 수 없습니다,

1) 정말 런타임에 Top-Level Containers을 많이 생성하지 않는/(뿐만 아니라 자바 PL에서) 가 완료되지 않습니다 때문에, 비행, 현재의 JVM 인스턴스가 종료 될 때까지,이 개체 GC'ed 적이 그들의 Grapfics2D 런타임에

2) myContainer#dispose()는로 현재의 JVM 인스턴스에 대한 동일 1.st JComponent 거기 JPanel 넣어 myPanel#removeAll() 부르지 만, JVM을 사용할 수 및 사용 메모리

3) 생성 단지 몇 Top-Level Containers (최대가 동시에 표시), 재사용와의 연결 10, 그렇지 않으면 당신은 RootPane 삭제되고 당신의 컨테이너 :-) 반투명 것 테두리에만 상태를 유지에서

4) partialy는

5), JVM이 호출 GC에 의해 메모리를 사용 줄일 수있다, 그러나 다만 Graphics2D에서 양을 returs 및 Garbage가 immediatelly 작동하지 않습니다 more here 유용한 정보 here

+0

thx에 감사드립니다. 하지만 제안 3을 이해하지 못합니다. – Bear

+0

btw, Java가 문제를 알고 있습니까? – Bear

+0

@ 2 개의 choise가 있으니 1) 3 - 4 개의 최상위 컨테이너를 만듭니다. JFrame JDialog (Modality 포함) 또는 JWindow, 2) 또는 CardLayout을 찾으십시오. http://download.oracle.com/javase/tutorial/uiswing/layout/card.html 그런 다음 Top- 레벨 컨테이너 : – mKorbel

2

코드가 없으면 jFrame을 (를) 호출하고 있습니다. dispose()?

공공 무효 처분()

그 소유 된 모든 아이의 Window, 그 하위에 의해 을 사용하는 모든 네이티브 스크린 자원, 그리고 모든. 그 , 이러한 구성 요소에 대한 리소스가 파괴됩니다, 그들이 사용하는 모든 메모리 OS로 반환되며 그들은 undisplayable로 표시됩니다.

더 많은 정보를 사용할 수 here 맞아

0

프레임에서 GC (가비지 수집기) 루트에 대한 강력한 참조가있는 경우 dispose 메서드를 호출하면 가비지 수집되지 않으므로 모든 메모리를 삭제 한 후에도 메모리 변경 내용을 볼 수 없습니다. 프레임. 메모리를 원할 경우 해제해야하는 항목부터 프레임을 가비지 수집해야합니다.

관련 문제