JAVA 8:영구 구역(PermGen)에서 원 공간(Metaspace)까지
주소.
눈 치 챘 어?
JDK 8 초기 접근 가능 버 전다운 로드 를 제 공 했 습 니 다.자바 개발 자 는 자바 8 이 제공 하 는 새로운 언어 와 운영 특성 을 사용 하여 실험 을 할 수 있 습 니 다.그 중 하 나 는 영구 세대(Permanent Generation(PermGen)를 완전히 제거 하 는 것 이다.이 는 JDK 7 부터 Oracle 이 움 직 이기 시작 했다.예 를 들 어 현지 화 된 String 은 JDK 7 부터 영구 세대(Permanent Generation)를 제거 했다.JDK 8 은 결국 은퇴 시 켰 다.
본 고 는 지금까지 제 가 수집 한 영구 세대(Permanent Generation)의 대체 자:메타 공간(Metaspace)에 대한 정 보 를 공유 할 것 입 니 다.JAVA 프로그램 을 수행 할 때 핫 스 팟 1.7 과 핫 스 팟 1.8(b75)의 운행 행 위 를 비교 해 보 겠 습 니 다.
메타 공간(Metaspace)의 마지막 규범,파라미터 조정,문 서 는 자바 8 이 정식으로 발 표 된 후에 공 개 됩 니 다.
메타 공간(Metaspace):새로운 메모리 공간의 탄생 Oracle Jrockit 과 IBM JVM 과 유사 하 게 JDK 8.HotSpot JVM 은 로 컬 화 된 메모리 저장 클래스 의 메타 데 이 터 를 사용 하기 시 작 했 습 니 다.이 공간 을 메타 스페이스(Metaspace)라 고 합 니 다.
좋 은 소식 은 자바.lang.OutOf Memory Error:PermGen 의 공간 문제 가 더 이상 존재 하지 않 고 이 메모리 공간 을 조정 하고 감시 할 필요 가 없다 는 것 을 의미 합 니 다.아직 빠 르 지 는 않 지만.이 변화 가 기본적으로 실 행 될 때,우 리 는 클래스 의 메타 데이터 의 메모리 점용 율 을 걱정 해 야 하 는 문 제 를 발견 할 수 있 습 니 다.따라서 이 새로운 기능 은 클래스 와 클래스 의 메모리 누 출 을 기적 적 으로 제거 하지 않 는 다 는 것 을 기억 하 십시오.이 문제 들 을 추적 하기 위해 서 는 다양한 방식 과 새로운 명 사 를 배 워 야 한다.
나 는 네가 영구 테이프 제거 의 총 결 과 를 읽 을 것 을 건의 한다.
Jon 의 이 문제 에 대한 의견. 。
요약:
영구 구역 의 상황:
메타 공간(Metaspace)메모리 할당 모델
원 공간의 용량
원 공간의 쓰레기 회수
자바 더미 공간의 영향
원 공간 모니터링
새로운 메타 공간 이 실 행 될 때의 행동 특징 을 잘 이해 하기 위해 메타 데이터 유출 자바 프로그램 을 만 들 수 있 습 니 다.
여기,이곳소스 코드 다운로드:
우 리 는 아래 의 장면 을 테스트 한다.
보시 다시 피 JVisualVM 의 보고 서 는 30K+클래스 를 불 러 올 때 영구적 으로 소 진 됩 니 다.프로그램 과 GC 의 출력 파일 에서 도 소 모 를 발견 할 수 있 습 니 다.클래스 메타 데이터 누설 시 뮬 레이 터 작성 자
Pierre-Hugues Charbonneau 블 로그:
http://javaeesupportpatterns.blogspot.com에서 오 류 를 설명 했다.
ERROR: java.lang.OutOfMemoryError: PermGen space
。
지금 우 리 는 HotSpot JDK 1.8 JRE 를 사용 하여 프로그램 을 실행 합 니 다.
JDK 1.8 @64-bit – Metaspace dynamic re-size
보시 다시 피 상세 한 GC 출력 은 자바 프로그램 이 계속 증가 하 는 메타 데이터 의 메모리 사용량 을 만족 시 키 기 위해 JVM 메타 공간 을 20 MB 동적 으로 이 컴퓨터 의 메모리 사용량 을 328 MB 로 확대 합 니 다.쓰레기 수집 도 관찰 할 수 있 습 니 다.JVM 은 모든 데 드 클래스 나 클래스 로 더 대상 을 파괴 하려 고 합 니 다.자바 프로그램 이 유출 된 후부 터 JVM 은 메타 공간의 메모리 공간 을 확대 해 야 합 니 다.
이 방안 은 50K 번 을 교체 할 수 있 으 며,OOM 이벤트 와 50K+클래스 를 불 러 오지 않 습 니 다.
이어서 마지막 테스트 장면 을 보 겠 습 니 다.
JDK 1.8 @64-bit – Metaspace depletion
현재 자바 프로그램의 출력 로그 에서 아래 의 이상 을 찾 을 수 있 습 니 다:
view source
?
1.
Class metadata leak simulator
2.
Author: Pierre-Hugues Charbonneau
3.
<a href=
"http://javaeesupportpatterns.blogspot.com"
>http://javaeesupportpatterns.blogspot.com<;/a>
4.
ERROR: java.lang.OutOfMemoryError: Metadata space
5.
Done!
예상대로 원 공간의 최대 사 이 즈 는 128 MB 로,우리 가 JDK 1.7 에서 처럼 50K 교체 계획 을 완수 하지 못 하 게 했다.JVM 에서 새로운 OOM 오 류 를 던 졌 습 니 다.상기 OOM 이 벤트 는 JVM 이 원 공간 에서 메모리 할당 을 캡 처 하 는 데 실 패 했 을 때 던 집 니 다.
\#metaspace.cpp 끝 말
나 는 네가 새로운 자바 8 원 공간 에 대한 초기 분석 과 실험 을 감상 할 수 있 기 를 바란다.현재 관측 에 따 르 면 우리 의 마지막 테스트 장면 에서 나타 나 는 빈번 한 원 공간 GC 와 OOM 과 같은 문 제 를 멀리 하기 위해 서 는 적절 한 모니터링 과 조정 이 필요 하 다.앞으로 의 글 에는 새로운 기능 과 관련 된 잠재 적 성능 개선 을 확인 하기 위해 성능 비 교 를 포함 할 수 있 습 니 다.언제든지 의견 을 제시 해 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.