2013-12-20 2 views
0

일부 애플리케이션 (서버 및 클라이언트)을 만들고 있습니다. System.gc()를 호출해야하는 지점이 있습니다.Java 및 호출 가비지 컬렉터

그러나 여기에 gc 호출을 권장하지 않는 Why is it bad practice to call System.gc()?이 있습니다. 내가)으로 System.gc를 (사용하는 프로그램이 ~ 80메가바이트 메모리에서 실행하지만 GC없이, 메모리가 ~ 600~700메가바이트까지 성장하고 내가 안드로이드 폰에서 실행해야하는 경우

가 다른 방법이 있습니까 기억을 없애기 위해?

감사

편집 : 나는으로 System.gc()가 좋은 실행과 테스트 (1 시간 전 이식) 한 안드로이드의 주석을보고, 나는 그것없이 테스트하지 않았습니다

편집 2 :으로 System.gc()와

:으로 System.gc()없이 http://imgur.com/M9yMBei : http://i.imgur.com/4qb2Ylc.png

편집 3 : 다음 5 분 후에 바탕 화면에서 실행되는 프로그램의 두 사진은 WOW! 1 전에이 응용 프로그램이 약 2GB의 RAM을 사용하고 게시했습니다!

+1

힙 600MB? – Blackbelt

+0

GC는 * 할 수있을 때 (그리고 필요할 때 * 생각할 때) 객체를 되 찾을 것입니다. 안드로이드와 같은 시스템의 경우에는 한번에로드 할 필요가없는 애플리케이션을 설계하는 것이 트릭입니다. 이것이 Views가 Android 등에서 자체 포함 된 수명을 갖는 이유입니다. 디자인은 작업 공간을 제한하는 것입니다. – user2864740

+0

명확하게 :'System.gc() '를 호출하지 않으면 모바일 장치에서 실행할 때 메모리가 최대 600, 700MB * * 증가합니까? 아니면 데스크톱 JRE가있는 데스크톱 컴퓨터에서이 테스트를 수행하고 있습니까? – delnan

답변

2

일반적으로 런타임은 사용자가하는 것보다 시스템 상태에 대해 더 많이 알고 있기 때문에 좋지 않습니다. RAM을 사용할 수 있다면 사용하지 않으시겠습니까? RAM을 사용할 수 없으면 시스템은 더 일찍 GC를 수행합니다.

어쨌든 System.gc()을 호출하는 것은 단지 힌트 일 뿐이며 시간이 지남에 따라 무시 될 가능성이 높아질 것이라는 힌트를 의심합니다.