Java에서 헌신적 인 기억의 정확한 상태
-
03-07-2019 - |
문제
메모리 원소 클래스에서 값이 쿼리 될 때 "커밋 된"메모리의 정확한 의미가 무엇인지 궁금합니다. 이 클래스는 "커밋 된 Java Virtual Machine에서 사용할 수있는 메모리 (바이트)를 나타냅니다."라고 설명합니다. 이것은 JVM 프로세스에 의해 메모리가 사용 중이며 Java 프로세스에 의해 공개 될 때까지 다른 프로세스에 사용할 수 없음을 의미하거나, 해당 양의 메모리에 할당하려고 시도하면 Java 프로세스가 성공할 것임을 의미합니다. ? 나는 이것이 구현에 따라 다를 수 있지만 핫스팟에만 관심이 있습니다.
해결책
커밋 된 크기는 실제로 할당 된 메모리이며, 중고 크기는 실제 데이터를 저장하는 데 사용되는 크기입니다 (~ = 커밋 된 경우 주요 GC를위한 시간이며 힙을 늘릴 수 있습니다). 최대 크기는 힙이 자랄 수있는 단단한 한계입니다. 충분하지 않으면 JVM이 제외하고 제외됩니다.
메모리가 커밋되면 확실히 사용할 수 있습니다. 또한 JVM이 더 많은 메모리를 커밋 할 수없는 유일한 경우 (최신 OS에서) 하드웨어가 가상 메모리를 벗어난 경우입니다.
이 모든 크기는 힙 영역의 크기 만 알려줍니다. JVM에는 다른 메모리 영역도 있습니다 (스레드 스택, JIT 캐시 등) 힙 영역은 일반적으로 가장 크며 이는 프로세스 발자국에 대략적으로 일치합니다.
두 메모 :
- 커밋 된 크기가 물리적 메모리에 맞지 않으면 그 일부가 페이지 파일로 교체됩니다. 이로 인해 GC 중에 큰 둔화가 발생하며이 경우 힙 크기를 줄임으로써 앱 성능을 향상시킵니다.
- 일부 운영 체제는 메모리의 이중 예약을 허용합니다. 사용하지 않는 한 원하는만큼 할당 할 수 있습니다 (OS를 잊어 버렸습니다. 누군가 나를 채우십시오).
다른 팁
"이것은 JVM 프로세스에 의해 메모리가 사용되고 있으며 다른 프로세스에는 사용할 수 없음을 의미합니까?" 따라서 OS가 JVM 프로세스에서 취한 것으로 보는 메모리의 양은 (또는 동일).
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html (링크 할 앵커가 없습니다).