2014-07-11 3 views
1

알고리즘의 메모리 성능이 어떻게 보이는지 빠른 실험을하고있었습니다. 입력이 약 2MB이고 알고리즘을 실행하는 데 약 1 초가 걸립니다. 메모리 할당을 살펴보기 위해 이것을 500 회 반복했습니다.Java 힙 메모리 사용량이 증가합니다.

이것은 JConsole의 메모리 사용량을 표시하는 방법입니다

enter image description here

GC가 시작하기 전에 (입력이 동일 할지라도) (좀 기하 급수적으로)마다 두 번 힙 메모리 사용량이 증가를 볼 수 있듯이.

누구에게 이것이 예상되는지, 왜 그런지 알 수 있습니까? JVM에서 최적화를 수행합니까?

감사합니다.

+0

http://docs.oracle.com/cd/E19900-01/819-4742/abeik/index.html – user1071777

+0

알고리즘을 실행하는 데 시간이 더 걸리는 것처럼 보입니다. 동일한 반복 횟수를 실행하고 있습니까? – JohnnyAW

+1

@ JigarJoshi GC 다음에 메모리를 보면, 메모리 누수가 없다는 것을 알 수 있습니다 (적어도 큰 것은 아닙니다). –

답변

3

누구에게 이것이 예상되는지, 왜 그런지 알 수 있습니까? JVM에서 최적화를 수행합니까?

JVM은 GC-ing에 소요되는 시간을 최소화하려고합니다. 더 많은 메모리를 사용하면 GC가 자주 필요하지 않습니다.

누출?

GC 후 메모리 사용량을 보면 거의 동일하므로 메모리 누수가 없습니다. 적어도 큰 것은 아닙니다.

메모리 누수가 있는지 확인하기 위해 Full GC 후에 사용한 메모리를 살펴 봐야하며 이는 마이너 컬렉션이라고 가정합니다.

+0

당신이 맞습니다, 그러나 같은 알고리즘의 다른 반복에서 동일한 데이터 세트가 메모리가 스파이크로 보이게합니다. +1 –

+0

@ JigarJoshi JVM이 점진적으로 GC 매개 변수를 변경합니다. 기하학적 인 증가가 그렇게 놀랄만하지 않게 너무 갑자기 그것들을 바꾸지 않으려 고 노력했습니다. 그것이 증가 할 수있는 것을 발견하고, 그것을 두 배로 늘리고, 증가시킬 수 있고, 두 배로 증가시킬 수 있습니다. –

+0

Thanks Peter. 그것은 의미가 있으며 여기에있는 일과 정확히 일치합니다. 또한 YourKit을 사용하여 메모리 누수가 없음을 확인했습니다. 생성되는 HashMap 객체가 많이 있습니다. 안녕하십니까. GC 매개 변수를 조정하는 방법에 대해 설명해 주시겠습니까? 왜 "더 많은 메모리 사용 => GC가 덜 자주 사용 되는가"? – N3da