2013-09-26 3 views
0

주기적으로 메모리를 많이 사용하는 작업을 수행하는 JBoss에서 Java 응용 프로그램을 실행하고 있습니다. 이 시간 동안 org.jboss.Main이 사용하는 메모리 양은 증가하지만 작업이 완료되면 떨어지지 않습니다. 저는 VisualVM을 사용하여 프로세스를 프로파일 링했으며 가비지 수집을 강제했습니다. org.jboss.Main에서 사용하는 메모리는 약 1GB로 유지됩니다. 힙 덤프의 기본 정보는 다음과 같습니다.JBoss가 메모리를 해제하지 않습니다.

Total bytes: 53,795,695 
Total classes: 5,696 
Total instances: 732,292 
Classloaders: 324 
GC roots: 2,540 
Number of objects pending for finalization: 0 

또한 메모리를 사용하여 클래스를 살펴본 결과 char []이 대부분의 메모리를 차지한다는 것을 알았습니다.

VisualVM이 내 활동 모니터보다 JBoss에서 사용되는 메모리가 20 배 적은 이유는 누구에게 말해 줄 수 있습니까? 그리고 누군가가 작업이 완료된 후 JBoss가 메모리를 공개하는 방법에 대해 더 많은 조언이나 지침을 제공 할 수 있다면 크게 감사 할 것입니다.

답변

1

VisualVM은 전체 GC 후에 힙의 크기를 표시합니다. 이것은 힙이 커지기 전에 사용할 수있는 데이터의 양입니다.

힙 덤프는 현재 사용중인 힙의 양을 보여줍니다.

+0

빠른 답변을 주셔서 감사합니다. '활동 모니터가 전체 GC 후에 힙의 크기를 표시하고 있습니다.'라는 뜻입니까? 그래서 힙이 커지기 전에 최대 1GB까지 사용할 수 있습니까? 그러면 힙 덤프가 "총 바이트 : 1,000,000,000"과 같이 표시 될 수 있다는 의미입니다. – elo96

+0

개체를 할당하는 비율로 인해 힙이 커지는 시점이있었습니다. GC는 크기를 예측하기 위해 1GB를 모두 사용하지 않았을 수 있습니다. 참고 : 각 지역, 에덴, 생존자 및 기숙사는 독립적으로 크기가 정해져 있습니다. 어느 시점에서 에덴이 완전해질 것으로 기대합니다. 생존자는 기본적으로 50 %로 가득 채우려고 노력하며,이 시점에서 자격은 만원 40 %에 불과합니다. –

+0

설명해 주셔서 고맙습니다. 또한 메모리 영역에 대해 조금 더 자세히 설명 할 것입니다. 마지막 질문 하나 : Activity Monitor의 메모리가 시간이 지남에 따라 변동하지만,이 [thread] (http://www.coderanch.com/t/202451/Performance/java/JVM-memory-releasing)에 따르면 일어나서 떨어지지 않아야합니다. 왜 그것이 변동될 수 있습니까? – elo96

관련 문제