자바 메모리 분포 실현 코드
더미 안의 메모 리 는 세 부분 으로 나 뉘 는데,젊 은 세대,늙 은 연대 와 원 공간 이기 때문에 더미 안의 메모리=젊 은 세대+늙 은 연대+원 공간 이다.다음은 세 부분 을 자세히 이야기 하 자.
1.1 젊 은 세대-젊 은 세대
-XX:MetaspaceSize, -XX:MaxMetaspaceSize
1.기본 매개 변수:
옛날 에는 전체 메모리 의 2/3 을 차지 했다.
젊 은 세대 가 전체 메모리 의 3 분 의 1 을 차지한다.
Eden 지역 은 전체 젊 은 세대 의 80%를 차지 하고 From 와 To 두 생존자 지역 은 각각 10%를 차지한다.
2.신 구 연대 관련 jvm 파라미터
-XX:NewRatio
신 구 연대 비례 를 설정 합 니 다.예 를 들 어-XX:NewRatio=5 는 신 구 연대 비례 가 1:5 이 고 신세대 가 메모리 의 1/6 을 차지 하 며 옛날 연 대 는 5/6 을 차지 합 니 다.-XX:SurvivorRatio
신세대 중 eden 과 두 개의 Survivo 구역 크기 의 비율 을 설정 합 니 다.예 를 들 어-XX:SurvivorRatio=8
,eden:s1:s2=8:1,기본 비율 은 8:1 입 니 다.메모리
우리 의 게임 서버 는 netty 를 사용 하기 때문에 netty,Netty 의 ByteBuffer 는 DIRECT BUFFERS 를 사용 하여 쌓 아 올 린 직접 메모리 로 Socket 읽 기와 쓰기 만 하면 바이트 버퍼 의 2 차 복사,쌓 아 올 린 메모리 의 제로 복사 가 필요 하지 않 습 니 다.효율 을 높 였 습 니 다.운영 체제 커 널 은 직접 데 이 터 를 쌓 아 올 리 는 메모리 에 기록 하기 때문에 일반 API 처럼 운영 체제 커 널 캐 시 1 부,프로그램 을 읽 을 때 프로그램 공간 으로 복사 할 필요 가 없습니다.
2.1 자바 에서 더미 밖에서 메모 리 를 개척 하 는 방법 은 두 가지 가 있다.
1.DirectBufferByteBuffer.allocateDirect(size)
2.JNI 로 자바 의 c/c++확장 을 쓰 고 확장 에 jvm 와 관련 되 지 않 고 시스템 에 메모 리 를 만 듭 니 다.
2.2 외부 메모리 사용 의 장점
1.쓰레기 수 거 를 줄 였 습 니 다.쓰레기 수 거 는 다른 작업 을 중단 하기 때 문 입 니 다.
2.복사 속 도 를 빠르게 해서 원 격 으로 flush 를 쌓 을 때 직접 메모리(비 메모리)로 복사 한 다음 에 보 냅 니 다.쌓 인 메모리 가 이 일 을 생략 한 셈 이다.
2.3 외부 메모리 의 단점
메모 리 를 제어 하기 어렵 고 외부 메모 리 를 사용 하면 JVM 관리 메모리 의 타당 성 을 간접 적 으로 잃 고 자신 이 관리 하 는 것 으로 바 뀌 었 습 니 다.메모리 가 넘 칠 때 검색 하기 가 매우 어렵 습 니 다.
쓰레기 회수
3.1 쓰레기 수 거(GC)
Minor GC
Full GC 가 나타 나 면 최소 한 번 이상 마 이 너 GC 를 동반 합 니 다(절대 가 아 닙 니 다.Parallel Sacvenge 수집 기 는 Major GC 정책 을 설정 할 수 있 습 니 다).
Major GC 속 도 는 일반적으로 Minor GC 보다 10 배 이상 느리다.
3.2 GC root
프로그램 은 모든 인용 관 계 를 그림 으로 보고 하나의 노드 GC ROOT 부터 해당 하 는 인용 노드 를 찾 습 니 다.이 노드 를 찾 은 후에 이 노드 의 인용 노드 를 계속 찾 습 니 다.모든 인용 노드 를 찾 은 후에 나머지 노드 는 인용 되 지 않 은 노드,즉 쓸모없는 노드 로 여 겨 지고 메모 리 를 방출 해 야 하 는 대상 입 니 다.
자바 에서 GC Root 의 대상 은
1.가상 컴퓨터 스 택 에서 인 용 된 대상(로 컬 변수 표)
2.방법 영역 에서 정적 속성 참조 대상
3 방법 영역 에서 상수 참조 대상
4.로 컬 방법 창고 에서 인 용 된 대상(Native 대상)
3.3 상용 쓰레기 수 거기
쓰레기 수집 기 는 메모리 회수 의 구체 적 인 실현 이다.가상 컴퓨터 가 제공 하 는 몇 가지 쓰레기 수집 기 를 소개 한다.
시리 얼 수집 기(복제 알고리즘)
신세대 단일 스 레 드 수집 기,태그 와 청 소 는 모두 단일 스 레 드 이 고 장점 은 간단 하고 효율 적 인 것 이다.
시리 얼 올 드 수집 기(태그-정리 알고리즘)
오래된 싱글 스 레 드 수집 기,Serial 수집 기의 오래된 버 전.
ParNew 수집 기(정지-복사 알고리즘)
신세대 수집 기 는 시리 얼 수집 기의 다 중 스 레 드 버 전 으로 볼 수 있 으 며 다 중 핵 CPU 환경 에서 시리 얼 보다 더 좋 은 표현 을 하고 있다.
Parallel Scavenge 수집 기(정지-복사 알고리즘)
병렬 수집 기 는 높 은 스루풋 을 추구 하고 CPU 를 효율적으로 활용 합 니 다.스루풋 은 보통 99%이 고 스루풋=사용자 스 레 드 시간/(사용자 스 레 드 시간+GC 스 레 드 시간)입 니 다.배경 응용 등 상호작용 에 대한 요구 가 높 지 않 은 장면 에 적합 하 다.
Parallel Old 수집 기(정지-복사 알고리즘)
Parallel Scavenge 수집 기의 오래된 버 전,병렬 수집 기,스루풋 우선
CMS(Concurrent Mark Sweet)수집 기(태그-청소 알고리즘)
높 은 병발,낮은 정지,최 단 GC 회수 정지 시간 을 추구 합 니 다.cpu 의 점용 이 비교적 높 고 응답 시간 이 빠 르 며 정지 시간 이 짧 습 니 다.다 중 핵 cpu 는 높 은 응답 시간 을 추구 합 니 다.
G1(Garbage-First)
현재 최신 회수 기 는 신세대 와 노년기 에 통용 된다.
신세대 수집 기 에 사용 되 는 수집 기:
Serial
,PraNew
,Parallel Scavenge
옛날 수집 기 에 사 용 된 수집 기:Serial Old
,Parallel Old
,CMS
저희 온라인 서버 는 G1 수집 기 를 사용 하고 있 습 니 다.총화
위 에 많은 내용 을 열거 하 였 으 나,기억 해 야 할 아래 몇 시 면 된다.
1.대상 의 이전 경로:Eden 에서 태 어 난 다음 에 Survivor 지역 에서 왔 다 갔다 하 며 한 번 씩 나 이 를 늘 리 고 나이 가 너무 많 으 면 바로 옛날 로 들어간다.
2.Eden 구역 이 가득 차 서 minor Gc 생 성
오래된 연대 가 만 료 되면 full gc 가 생 긴 다.
3.회수 기 는 gc 를 실행 한 다 는 것 을 기억 하고 최신 G1 회수 기 를 선택 하면 됩 니 다.
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.