JVM 관련 면접 문제

5998 단어 javaweb
1. 클래스 의 로드 는 무엇 입 니까?
클래스 의 불 러 오 는 것 은 클래스 의. class 파일 의 바 이 너 리 데 이 터 를 메모리 에 읽 어 실행 할 때 데이터 구역 에 두 는 방법 구역 을 말 합 니 다. 그리고 쌓 아 올 리 는 구역 에 자바. lang. class 대상 을 만들어 서 방법 구역 에 있 는 데이터 구 조 를 패키지 하 는 것 을 말 합 니 다.클래스 의 로 딩 최종 제품 은 로 딩 구역 에 있 는 Class 대상 입 니 다. Class 대상 은 방법 구역 내 데이터 구 조 를 패키지 하고 자바 프로그래머 에 게 접근 방법 구역 내 데이터 구조의 인 터 페 이 스 를 제공 합 니 다.
2. 클래스 의 생명주기
라 이 프 사이클
설명 하 다.
로드
클래스 의 바 이 너 리 데 이 터 를 찾 고 불 러 옵 니 다.
링크
검증 하 다.
파일 형식, 메타 데이터, 바이트 코드, 기호 참조 검증
준비 하 다.
클래스 의 정적 변수 에 메모 리 를 할당 하고 기본 값 으로 초기 화 합 니 다.
해석 하 다.
클래스 의 기호 인용 을 직접 참조 로 변환 합 니 다.
초기 화
클래스 의 정적 변수 에 정확 한 초기 값 을 부여 합 니 다.
쓰다
new 대상 프로그램 에서 사용
마 운 트 해제
쓰레기 수 거 를 실행 하 다
3. 클래스 로 더
클래스 로 더
설명 하 다.
Bootstrap ClassLoader (시작 클래스 로 더)
JDK \ \ jre \ lib (JDK 대표 JDK 의 설치 디 렉 터 리, 이하 동일) 에 저장 되 거나 - Xbootclasspath 매개 변수 가 지정 한 경로 에 저 장 된 가상 컴퓨터 에 의 해 인식 되 는 라 이브 러 리 를 불 러 옵 니 다.
확장 클래스 로드 (확장 클래스 로드)
이 로 더 는 sun. misc. Launcher $ExtClassLoader 에서 이 루어 집 니 다. DK \ jre \ lib \ ext 디 렉 터 리 나 자바 ext. dirs 시스템 변수 가 지정 한 경로 의 모든 라 이브 러 리 (예 를 들 어 자바 x. * 시작 클래스) 를 불 러 옵 니 다. 개발 자 는 확장 클래스 로 더 를 직접 사용 할 수 있 습 니 다.
응용 프로그램 클래스 로드 (응용 프로그램 클래스 로드)
이 종류의 로 더 sun. misc. Launcher $AppClassLoader 는 사용자 클래스 경로 (ClassPath) 가 지정 한 클래스 를 불 러 옵 니 다. 개발 자 는 이 종류의 로 더 를 직접 사용 할 수 있 습 니 다.
4. 자바 류 의 로드 메커니즘
로드 메커니즘
설명 하 다.
전면 책임
클래스 로 더 가 클래스 를 불 러 오 는 것 을 담당 할 때, 클래스 가 의존 하고 인용 하 는 다른 클래스 도 클래스 로 더 가 불 러 오 는 것 을 표시 하지 않 는 한, 클래스 로 더 를 불 러 옵 니 다.
부계 의뢰
먼저 부모 클래스 로 더 를 불 러 오 려 고 합 니 다. 부모 클래스 로 더 를 불 러 올 수 없 을 때 만 클래스 경로 에서 이 종 류 를 불 러 오 려 고 합 니 다.
캐 시 메커니즘
캐 시 시스템 은 불 러 온 모든 Class 가 캐 시 되 는 것 을 보장 합 니 다. 프로그램 에서 특정한 Class 를 사용 해 야 할 때 클래스 로 더 는 캐 시 영역 에서 이 Class 를 찾 습 니 다. 캐 시 영역 이 존재 하지 않 아야 시스템 이 해당 하 는 바 이 너 리 데 이 터 를 읽 고 Class 이미지 로 변환 하여 캐 시 영역 에 저장 합 니 다.Class 를 수정 한 후 JVM 을 다시 시작 해 야 프로그램의 수정 이 적용 되 는 이유 입 니 다.
 
5. JVM 메모리 구조
메모리 구조
설명 하 다.
쌓다
자바 가상 컴퓨터 가 관리 하 는 메모리 중 가장 큰 것 입 니 다.자바 더 미 는 모든 스 레 드 에 공 유 된 메모리 영역 으로 가상 컴퓨터 가 시 작 될 때 만 듭 니 다.이 메모리 영역의 유일한 목적 은 대상 인 스 턴 스 를 저장 하 는 것 입 니 다. 거의 모든 대상 인 스 턴 스 가 여기에 메모 리 를 할당 합 니 다.
방법 영역
방법 영역 (Method Area) 은 자바 더미 와 마찬가지 로 각 스 레 드 가 공유 하 는 메모리 영역 으로 가상 컴퓨터 에 불 러 온 클래스 정보, 상수, 정적 변수, 인 스 턴 트 컴 파일 러 가 컴 파일 한 코드 등 데 이 터 를 저장 하 는 데 사 용 됩 니 다.
프로그램 카운터
프로그램 카운터 (Program Counter Register) 는 현재 스 레 드 에서 실행 되 고 있 는 바이트 코드 의 줄 표시 기 역할 을 하 는 작은 메모리 공간 입 니 다.
JVM 스 택
프로그램 카운터 와 마찬가지 로 자바 가상 머 신 스 택 (Java Virtual Machine Stacks) 도 스 레 드 가 개인 적 이 고 수명 주 기 는 스 레 드 와 같 습 니 다.가상 스 택 은 자바 방법 으로 실 행 된 메모리 모델 을 설명 합 니 다. 모든 방법 이 실 행 될 때 스 택 프레임 (Stack Frame) 을 동시에 만들어 국부 변수 표, 작업 스 택, 동적 링크, 방법 출구 등 정 보 를 저장 합 니 다.모든 방법 이 실 행 될 때 까지 호출 되 고 하나의 스 택 프레임 이 가상 스 택 에서 스 택 에서 스 택 으로 들 어 가 는 과정 에 대응 합 니 다.
로 컬 방법 창고
로 컬 방법 스 택 (Native Method Stacks) 은 가상 컴퓨터 스 택 이 발휘 하 는 역할 과 매우 비슷 하 다. 그 차이 점 은 가상 컴퓨터 스 택 이 가상 컴퓨터 에 자바 방법 (즉 바이트 코드) 서 비 스 를 수행 하 는 것 에 불과 하고 로 컬 방법 스 택 은 가상 컴퓨터 를 위 한 Native 방법 서비스 이다.
 6. 대상 의 생존 여 부 를 판단 하 는 두 가지 방법
방법.
설명 하 다.
인용 계수
대상 마다 인용 계수 속성 이 있 습 니 다. 인용 을 추가 할 때 1 을 더 하고 인용 방출 시 1 을 줄 이 며 0 으로 계산 할 때 회수 할 수 있 습 니 다.이 방법 은 간단 해서 대상 이 서로 반복 적 으로 인용 하 는 문 제 를 해결 할 수 없다.
접근 성 분석
GC Roots 부터 아래로 검색 하고 지나 간 경 로 를 참조 체인 이 라 고 합 니 다.대상 이 GC Roots 에 인용 체인 이 연결 되 어 있 지 않 을 때 이 대상 은 사용 할 수 없고 대상 에 도달 할 수 없다 는 것 을 증명 합 니 다.
7. GC 회수 알고리즘
알고리즘
설명 하 다.
태그 지우 기
이름 처럼 알고리즘 은 '태그' 와 '제거' 두 단계 로 나 뉜 다. 먼저 회수 해 야 할 모든 대상 을 표시 하고 표시 가 완 료 된 후에 표 시 된 모든 대상 을 통일 적 으로 회수 합 니 다.
태그 압축
그것 은 사용 가능 한 메모 리 를 용량 에 따라 크기 가 같은 두 조각 으로 나 누 어 매번 그 중의 한 조각 만 사용한다.이 메모리 가 다 떨 어 지면 살아 있 는 대상 을 다른 블록 으로 복사 한 다음 사용 한 메모리 공간 을 한 번 에 지 웁 니 다.
복제 알고리즘
태그 프로 세 스 는 여전히 '태그 - 제거' 알고리즘 과 같 지만 후속 절 차 는 회수 가능 한 대상 을 직접 청소 하 는 것 이 아니 라 살아 있 는 모든 대상 을 한 쪽으로 이동 시 킨 다음 에 엔 드 경계 이외 의 메모 리 를 직접 청소 하 는 것 입 니 다.
분할 회수
자바 더 미 를 신세대 와 연대 로 나 누 면 각 연대 의 특징 에 따라 가장 적절 한 수집 알고리즘 을 사용 할 수 있다.
8. 쓰레기 수 거 기
회수 기
설명 하 다.
G1 수집 기
서버 를 위 한 쓰레기 수집 기 입 니 다. 주로 여러 개의 프로세서 와 대 용량 메모 리 를 갖 춘 기 계 를 대상 으로 합 니 다. 높 은 확률 로 GC 정지 시간 요 구 를 만족 시 키 는 동시에 높 은 스루풋 성능 특징 도 가지 고 있 습 니 다.
CMS 수집 기
가장 짧 은 회수 정지 시간 을 가 져 오 는 것 을 목표 로 하 는 수집 기 는 '태그 - 제거' 알고리즘 을 바탕 으로 이 루어 진 것 으로 4 단계 로 나 뉜 다. 초기 태그, 동시 태그, 재 태그, 동시 제거 로 나 뉜 다.
9. JVM 의 세대 구분
대 를 나누다
설명 하 다.
젊 은 세대
새로 생 성 된 모든 대상 저장
연로 대
젊 은 세대 에서 N 차 쓰레기 수 거 를 거 쳐 살아 남 은 대상 은 노후 대 에 두 기 때문에 모두 수명 주기 가 긴 대상 이다.
지구 대
자바 클래스, 방법 등 정적 파일 을 저장 하 는 데 사용 합 니 다.
10. ClassLoader 부모 의뢰 모드 란 무엇 인가
 

만약 에 하나의 클래스 로 더 가 불 러 오 라 는 요청 을 받 았 다 면 먼저 이 종 류 를 불 러 오지 않 고 부모 로 더 에 게 요청 을 맡 겼 습 니 다. 순서대로 위로 모든 클래스 로 더 는 최상 위 로 더 류 로 더 에 전 달 됩 니 다. 최상 위 로 더 가 클래스 로 더 이상 불 러 올 수 없 을 때 하위 로 더 에서 로드 를 완료 합 니 다.
왜 부모 의뢰 모드 가 있어 야 합 니까?
답: 보안, 악성 코드 불 러 오 는 것 을 방지 합 니 다.
11. ClassLoader 부모 위탁 로 딩 절차
1. 현재 ClassLoader 는 먼저 자신 이 불 러 온 클래스 에서 이 클래스 가 불 러 왔 는 지 확인 합 니 다. 불 러 왔 으 면 원래 불 러 온 클래스 로 되 돌아 갑 니 다.모든 종류의 로 더 는 자신의 로 딩 캐 시 를 가지 고 있 습 니 다. 하나의 클래스 가 로 딩 되면 캐 시 를 넣 고 다음 에 로 딩 할 때 바로 돌아 갈 수 있 습 니 다.
2. 현재 classLoader 의 캐 시 에서 불 러 온 클래스 를 찾 지 못 했 을 때 부모 클래스 로 더 를 불 러 오 라 고 의뢰 합 니 다. 부모 클래스 로 더 는 같은 정책 을 사용 합 니 다. 먼저 자신의 캐 시 를 확인 한 다음 부모 클래스 로 더 를 불 러 오 라 고 의뢰 합 니 다. bootstrp ClassLoader 까지.
3. 모든 부모 클래스 로 더 가 불 러 오지 않 았 을 때 현재 클래스 로 더 를 불 러 오고 다음 에 불 러 오 라 는 요청 이 있 을 때 바로 돌아 갈 수 있 도록 자신의 캐 시 에 넣 습 니 다. 
12. 클래스 초기 화 시기
1. 클래스 의 실제 열 을 만 드 는 것 이 new 일 때 입 니 다.
2. 특정한 유형의 정적 변 수 를 방문 하거나 정적 변 수 를 할당 합 니 다.
3. 클래스 를 호출 하 는 정적 방법
4. 반사
5. 어떤 하위 클래스 를 초기 화하 면 해당 하위 클래스 의 부모 클래스 도 초기 화
13. JVM 이 라 이 프 사이클 을 끝내는 모습
1. System. exit () 를 실행 합 니 다.
2. 프로그램 정상 실행 종료
3. 프로그램 이상 종료
 14. 메모리 설정 매개 변수
  • - Xmx 설치 더미 의 최대 공간 크기
  • - Xms 설치 더미 의 최소 공간 크기
  • 15. StackOverflow 이상 발생 원인
    근본 원인: 요청 한 스 택 의 깊이 가 JVM 이 스 레 드 에 분 배 된 스 택 크기 를 초과 하여 스 택 이 넘 쳤 습 니 다.
    원인: 재 귀적 호출 에 출구 가 없습니다.

    좋은 웹페이지 즐겨찾기