목차
初始化" >初始化
Java Java인터뷰 질문들 면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

Aug 23, 2023 pm 03:05 PM
자바 면접 질문

Loading

클래스를 사용하려면 ClassLoader를 통해 클래스를 메모리에 로드해야 합니다

"클래스 로딩 단계는 주로 다음 세 가지를 완료합니다."

  1. 전체 클래스 이름을 통해 클래스의 바이너리 스트림을 가져옵니다
  2. 클래스의 바이너리 스트림을 메소드 영역의 데이터 구조로 구문 분석합니다.
  3. 표현할 java.lang.Class 클래스의 인스턴스를 생성합니다. 유형, 메소드 영역 이 클래스 액세스 입구
면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

"전체 클래스 이름을 통해 클래스의 바이너리 스트림을 얻는 방법은 여러 가지가 있습니다."

  1. zip 패키지에서 가져오기
  2. 네트워크에서 가져오기
  3. 동적 프록시 기술과 같은 런타임 계산 생성
  4. ...

"배열이 아닌 유형의 로딩 단계의 경우 내장된- Java 가상 머신의 클래스 로더에서 완료하거나 사용자 정의 클래스 로더를 사용하여 완료할 수 있습니다."

Link

"이번 연결 단계는 크게 검증, 준비, 분석 3단계로 나누어집니다."

검증

" 검증단계는 주로 클래스 파일 형식이 올바르고 실행 시 가상 머신의 보안을 위협하지 않는지 확인하기 위한 것입니다."

검증 단계에는 많은 규칙이 있지만 대략 다음 네 단계로 나뉩니다면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개) "구체적인 내용은 자세히 설명하지 않겠습니다." "Java Virtual Machine에 대한 심층적인 이해"를 참조하세요. 이 기사에서는 메모리 할당에 대한 자세한 내용을 설명하지 않고 요약하고 클래스 로딩의 전체 과정을 파악하는 것을 선호합니다. 클래스의 정적 변수에 대해 기본값으로 초기화합니다."

공통 데이터 유형의 기본값은 다음과 같습니다
데이터 유형 기본값
byte (바이트)0
short (short)0
int 0
길게 0L
float 0.0f
double 0.0d
boolean false
char 'u0000'
reference null

"클래스 정적 변수의 필드 속성 테이블에 ConstantValue 속성이 존재하면 대입문이 직접 실행됩니다."

그러면 어떤 상황에서 클래스 정적 변수의 필드 속성 테이블에 ConstantValue 속성이 존재합니까? ?

  1. Class 정적 변수는 기본 데이터형으로 final로 수정됩니다
  2. Class 정적 변수는 String형으로 final로 수정되며 리터럴 형태로 값이 할당됩니다

순서 클래스 파일 코드의 바이트를 쉽게 볼 수 있도록 IDEA에서 플러그인 jclasslib 바이트코드 뷰어를 다운로드했는데 이는 매우 편리했습니다. 다음 코드를 사용하여 바이트코드 형식으로 검증합니다

public class Person {

    private static int age = 10;
    private static final int length = 160;
    private static final String name = "name";
    private static final String loc = new String("loc");
}
로그인 후 복사

면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)"따라서 길이 및 이름 속성은 준비 단계에서 ConstantValue에서 지정한 값이 할당됩니다."

"그러면 어느 단계에서 age 및 loc 속성이 할당됩니까? 초기화 단계입니다. 이에 대해서는 나중에 자세히 소개하겠습니다. 클래스, 인터페이스, 필드 및 메소드를 직접 참조로 》기호 참조: 기호 세트를 사용하여 참조된 대상을 설명합니다. 직접 참조, 대상에 대한 직접 포인터면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

저와 함께 다음과 같이 클래스를 작성하세요

public class Student {

    private String name;
    private int age;

    public String getName() {
        return this.name;
    }
}
로그인 후 복사
필드를 예로 들면 이름과 나이에 해당하는 객체는 메모리 주소를 직접 가리키지 않고 문자열로 설명됩니다( 즉, 상징적 참조). 구문 분석 단계는 이러한 설명을 대상을 직접 가리키는 포인터(즉, 직접 참조)로 변환하는 것입니다

初始化

「执行类静态成员变量赋值语句和静态代码块中的语句」

면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

我们把上面的Student代码改成如下形式

public class Student {

    private String name;
    private int age = 10;
    private static int gender = 1;

    {
        System.out.println("构造代码块");
    }

    static {
        System.out.println("静态代码块");
    }

    public Student() {
        System.out.println("构造函数");
    }

    public String getName() {
        return this.name;
    }
}
로그인 후 복사

可以看到字节码中包含了3个方法,getName方法我们知道,方法里面执行了哪些逻辑?면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)从字节码的角度分析一波

方法」

면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

从字节码可以看到方法的主要逻辑为

  1. 调用父类的方法
  2. 非静态成员变量赋值
  3. 执行构造代码块
  4. 执行构造函数

면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)方法」면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)从字节码可以看到方法的主要逻辑为

  1. 정적 변수의 할당 문 실행
  2. 정적 코드 블록의 문 실행
  3. 한 가지 주의할 점은 "Java Virtual Machine은 하위 클래스의 메서드 이전에 가 실행되면 상위 클래스의 메서드가 실행되었습니다."

"몇 가지 인터뷰 질문이 종종 있기 때문에 메소드의 역할을 이해하는 것이 필요합니다. 정적 코드 블록, 생성된 코드 블록 및 생성된 함수의 실행 순서 "

여기에 결론을 직접 요약하겠습니다. 데모를 작성하여 확인할 수 있습니다.

"상속 없는 실행 순서"

  1. 정적 코드 블록 및 정적 멤버 변수, 실행 순서는 쓰기 순서에 따라 결정됩니다(한 번만 실행됩니다).
  2. 코드 블록 및 비정적 멤버 변수를 구성하면 쓰기 순서에 따라 실행 순서가 결정됩니다.
  3. 생성자

"상속을 통한 실행 순서"

  1. 부모 클래스의 정적(정적 코드 블록, 정적 멤버 변수), 하위 클래스의 정적(정적 코드 블록, 정적 멤버 변수)( 한 번만 실행됨)
  2. 부모 클래스의 비정적(구성된 코드 블록), 비정적 멤버 변수), 부모 클래스의 생성자
  3. 비정적(구성 코드 블록, 비정적) -정적 멤버 변수) 하위 클래스의 생성자

Unloading

가비지 수집은 힙뿐만 아니라 메서드 영역에서도 발생합니다. 그런데 메소드 영역에서 타입 데이터를 재활용하기 위한 조건이 꽤 까다롭습니다면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)다음 그림은 메소드 영역에서 Simple 클래스를 재활용하고 싶은 예시입니다

  1. 샘플 클래스와 힙의 하위 클래스가 재활용되었는지 확인해야 합니다
  2. Sample 클래스를 로드하는 MyClassLoader가 재활용되었습니다.
  3. Sample 클래스에 해당하는 클래스 개체가 재활용되었습니다면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

메서드 영역에서 타입 데이터를 재활용하는 조건은 상대적으로 가혹하지만 결과가 미미하기 때문에 일부 가비지 컬렉터는 메소드 영역에서 타입 데이터를 재활용하지 않는 것을 볼 수 있습니다

요약

클래스 로딩 과정면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

변수 할당 과정면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)

위 내용은 면접관: 클래스 로딩 과정에 대해 알려주세요(다이어그램 10개)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

인터뷰어: Spring Aop 공통 주석 및 실행 순서 인터뷰어: Spring Aop 공통 주석 및 실행 순서 Aug 15, 2023 pm 04:32 PM

Spring을 알아야 하므로 Aop의 모든 알림 순서에 대해 이야기해 보겠습니다. Spring Boot 또는 Spring Boot 2는 Aop의 실행 순서에 어떤 영향을 줍니까? AOP에서 직면한 함정에 대해 알려주십시오.

특정 그룹과의 인터뷰: 온라인에서 OOM을 발견하면 어떻게 문제를 해결해야 합니까? 어떻게 해결하나요? 어떤 옵션이 있나요? 특정 그룹과의 인터뷰: 온라인에서 OOM을 발견하면 어떻게 문제를 해결해야 합니까? 어떻게 해결하나요? 어떤 옵션이 있나요? Aug 23, 2023 pm 02:34 PM

OOM은 코드나 JVM 매개변수 구성으로 인해 프로그램에 취약점이 있음을 의미합니다. 이 기사에서는 Java 프로세스가 OOM을 트리거할 때 문제를 해결하는 방법에 대해 독자에게 설명합니다.

초보자도 BAT 면접관과 경쟁할 수 있습니다: CAS 초보자도 BAT 면접관과 경쟁할 수 있습니다: CAS Aug 24, 2023 pm 03:09 PM

자바 동시 프로그래밍 시리즈의 추가 챕터인 C A S(비교 및 교환)는 여전히 이해하기 쉬운 스타일로 그림과 텍스트를 포함해 독자들이 면접관과 열띤 대화를 나눌 수 있도록 해준다.

Ele.me의 필기 시험 문제는 간단해 보이지만 많은 사람들을 당황하게 합니다. Ele.me의 필기 시험 문제는 간단해 보이지만 많은 사람들을 당황하게 합니다. Aug 24, 2023 pm 03:29 PM

많은 회사의 필기 시험 문제를 과소평가하지 마십시오. 함정이 있으며 우연히 함정에 빠질 수 있습니다. 이런 주기에 관한 필기시험 문제를 접하게 된다면 차분하게 생각하고 차근차근 풀어나가시길 권합니다.

지난주에 XX보험 인터뷰했는데 멋있었어요! ! ! 지난주에 XX보험 인터뷰했는데 멋있었어요! ! ! Aug 25, 2023 pm 03:44 PM

지난 주에 그룹의 한 친구가 Ping An Insurance와 인터뷰를 하러 갔습니다. 결과는 다소 아쉽지만, 말씀하신 것처럼 기본적으로 모든 질문에 낙담하지 않기를 바랍니다. 면접 질문을 외워야 면접이 해결될 수 있으니, 열심히 해주세요!

5개의 문자열 면접 질문, 10% 미만의 사람들이 모두 올바르게 답할 수 있습니다! (답변 포함) 5개의 문자열 면접 질문, 10% 미만의 사람들이 모두 올바르게 답할 수 있습니다! (답변 포함) Aug 23, 2023 pm 02:49 PM

​이 기사에서는 Java String 클래스에 관한 5가지 면접 질문을 살펴보겠습니다. 저는 인터뷰 과정에서 이 5가지 질문 중 몇 가지를 직접 경험했습니다. 이 기사는 이러한 질문에 대한 답변이 왜 이런지 이해하는 데 도움이 될 것입니다.

100개의 Linux 인터뷰 질문과 답변을 수집하는 것이 좋습니다 100개의 Linux 인터뷰 질문과 답변을 수집하는 것이 좋습니다 Aug 23, 2023 pm 02:37 PM

이 기사에는 Linux 개요, 디스크, 디렉토리, 파일, 보안, 구문 수준, 실제 전투, 파일 관리 명령, 문서 편집 명령, 디스크 관리 명령, 네트워크 통신 명령, 시스템 관리 명령, 백업을 다루는 총 30,000 단어가 넘습니다. 압축 명령 등 Linux 지식 포인트 해체.

메이투안, 대답할 수 있는지 볼까? 메이투안, 대답할 수 있는지 볼까? Aug 24, 2023 pm 03:51 PM

메이투안, 대답할 수 있는지 볼까?

See all articles