JVM 방법 영역

JVM 방법 영역
  • 방법 구역
  • classload 가 불 러 온 클래스 의 내용
  • 상수 탱크 와 운행 시 상수 탱크
  • 방법 영역
    먼저 특징 1.방법 구역(Method Area)은 자바 더미 와 마찬가지 로 모든 스 레 드 가 공유 하 는 메모리 영역 입 니 다.2.자바 가상 컴퓨터 규범 은 방법 구역 을 쌓 는 논리 적 인 부분 으로 묘사 하지만 Non-Heap(비 쌓 기)라 는 별명 이 있 습 니 다.목적 은 자바 더미 와 구분 하 는 것 입 니 다.사실 이해 하기 도 좋 습 니 다.바로 일부 class 유형의 대상 입 니 다.예 를 들 어 Object.class 도 대상 입 니 다.다만 대상 은 사용 할 대상 이 아니 라 금 형 대상 으로 진정 으로 필요 한 대상 을 만 드 는 대상 이다.예 를 들 어 월병 을 만 들 려 면 틀 이 필요 하고 월병 은 대상 이 며 틀 도 대상 이다.이것 은 틀 입 니 다.창고 에 보관 하 는 것 이 아니 라 가공 공장(방법 구역)이 존재 합 니 다.본질 적 으로 모두 저장 대상 의 곳 입 니 다.다만 방법 구역 은 미리 준비 해 야 합 니 다.3.미리 준비 해 야 하기 때문에 클래스 로 더 를 통 해 바이트 코드 class 파일 을 방법 구역 에 불 러 오 면 진정한 모드 가 됩 니 다.우리 가 쓴 자바 파일 은 컴 파일 을 거 친 후에 하나의 모드 의 도면 이 라 고 할 수 있 습 니 다.classloader 로 불 러 온 후에 야 진정한 대상 을 만 들 수 있 는 모드 가 될 수 있 습 니 다.4.정적 구성원 은 클래스 변수 로 field 에 저 장 됩 니 다.info 표 에서;정적 방법 은 method 에 저 장 됩 니 다.info 표 에서;대상 이 어디 에 저장 되 어 있 는 지,예 를 들 어 아래 의 것 을 보아 야 한다.
    //            ,   "str",   new String();       ,           
    String str = new String("str");
    //     ,   String               ,           ,        ,       ,  new    ,          "str"       ,         
    String str = new String(new Object().toString());
    

    classload 가 불 러 온 클래스 의 내용
    유형 정보
  • 유형의 전체 제한 이름 2.초 류 의 전체 제한 이름 3.직접 초 인터페이스 의 전체 제한 이름 4.유형 표지(이 종 류 는 유형 입 니까?인터페이스 유형 입 니까?)5.유형의 방문 설명자(Public,private,default,abstract,final,static)2.유형의 상수 풀 은 이 유형 에 사용 되 는 상수 의 질서 있 는 집합 을 포함 하고 직접 상수(예 를 들 어 문자열,문자열,static)를 포함한다.정수,부동 소수점 상수)와 다른 유형,필드,방법 에 대한 기호 참조.상수 탱크 에 저 장 된 상수 마다 하나의 색인 이 있 는데 마치 배열 의 필드 와 같다.상수 탱크 에 저 장 된 모든 유형 이 사용 하 는 유형,필드,방법의 기호 참조 이기 때문에 동적 연결(스 택 에 대응 하 는 방법 은 이 참조)의 주요 대상(동적 링크 에서 핵심 역할 을 합 니 다)이기 도 합 니 다.3.필드 정보
  • 필드 수정자(Public,protect,private,default)2.필드 의 유형 3.필드 이름 4.방법 정보
  • 방법 명 2.방법의 반환 유형(void 포함)3.방법 매개 변수의 유형,수량 과 순서 4.방법 수정자(Public,private,proctected,static,final,synchronized,native,abstract)5.비 로 컬 방법 에 대해 추가 적 인 방법 정 보 는 방법 구역 에 저장 해 야 한다(부분 변수 표 크기 와 조작 수 스 택 크기,방법 체 바이트 코드,이상 표)5,클래스 변수(정적 변수)는 모든 대상 이 공유 하 는 변 수 를 말 합 니 다.이 대상 의 인 스 턴 스 를 만 들 지 않 아 도 접근 할 수 있 는 클래스 변 수 를 말 합 니 다.클래스 와 연결 되 어 있 습 니 다.클래스 로 더 를 가리 키 는 인용 JVM 은 시작 로 더 에서 불 러 오 는 지,사용자 클래스 로 더 에서 불 러 오 는 지 알 아야 합 니 다.사용자 클래스 로 더 를 불 러 오 는 형식 이 라면 JVM 은 이 종류의 로 더 를 형식 정보의 일부분 으로 방법 영역 에 저장 합 니 다.JVM 은 동적 링크 를 할 때 이 정보 가 필요 합 니 다.한 유형 을 다른 유형의 인용 으로 해석 할 때 JVM 은 이 두 유형의 클래스 로 더 가 동일 하 다 는 것 을 보증 해 야 합 니 다.이것 은 JVM 이 이름 공간 을 구분 하 는 방식 에 매우 중요 하 다.7.Class 인 스 턴 스 를 가리 키 는 인용 JVM 은 모든 불 러 오 는 클래스 와 인터페이스 에 자바.lang.Class 인 스 턴 스(JDK 6 는 방법 구역 에 저장 되 고 JDK 6 이후 자바 더미 에 저장)를 만 듭 니 다.이 대상 은 이 바이트 코드 메모리 블록 에 관 한 모든 정 보 를 저장 합 니 다.평소 사용 하 는 this.getClass().getName()this.getClass().getDeclared Methods()this.getClass().getDeclared Fields()와 같이 클래스 의 다양한 정 보 를 얻 을 수 있 습 니 다.모두 이 Class 참조 로 얻 을 수 있 습 니 다.8.방법 표 는 방문 효율 을 높이 기 위해 반드시 방법 구역 에 저 장 된 데이터 정보 구 조 를 자세하게 설계 해 야 한다.위 에서 논의 한 구 조 를 제외 하고 JVM 의 실현 자 는 방법론 과 같은 다른 데이터 구 조 를 추가 할 수 있다.JVM 은 불 러 오 는 모든 비 가상 클래스 의 유형 정보 에 하나의 방법 표를 추 가 했 습 니 다.방법 표 는 클래스 인 스 턴 스 방법 에 대한 직접적인 참조(부모 클래스 에서 계승 하 는 방법 포함)입 니 다.JVM 은 방법론 을 통 해 인 스 턴 스 방법 을 빠르게 활성화 할 수 있 습 니 다.(이곳 의 방법 표 는 C++의 가상 함수 표 와 같다.자바 가 지침 이 없다 고 선언 한 것 처럼 자바 에는 모두 지침 이 있다.더욱 안전 한 것 은 더욱 완 비 된 검사 체 제 를 추 가 했 을 뿐 이지 만 이것 은 모두 효율 을 희생 하 는 대가 이다.자바 의 설계 자 는 항상 안전 을 효율 위 에 두 어야 모든 자바 가 네트워크 개발 에 더욱 적합 하 다.
  • 상수 탱크 와 운행 시 상수 탱크
       public static String a = "a";
        public static String b = "b";
        public static String a_b = "a" + "b";
        public static String a_b_ = "a" + "b";
        public static String ab = a + b;
        public static String ab2 = a + b;
    
        public static void main(String[] args) {
         
            System.out.println(a_b == a_b_);//true    
            System.out.println(ab == ab2);//false       
        }
    

    코드 와 우 리 를 통 해 알 수 있 듯 이 할당 할 때 변 수 를 더 하면 실행 시 상수 이 고 결 과 는 false 입 니 다.만약 두 개의 확실한 String 대상 이 변 한다 면,그것 은 true 이 고,상수 탱크 입 니 다.

    좋은 웹페이지 즐겨찾기