구조로 알아보는 JVM의 동작 원리

클래스 파일 - 개발자가 만드는 혹은 이미 만들어진 파일.

클래스 로더 서브 시스템 - JVM은 실행할 클래스 파일을 읽고, JVM메모리에 올려놓는 과정이 필요. 이 과정을 클래스 로딩이라하며 JVM의 클래스 로더 서브 시스템이 담당.

 

실행데이터 영역 - 클래스 로더로부터 분석된 데이터를 저장하고 실행 도중 필요한 데이터를 저장하는 영역

  • 메소드 영역(코드 영역) : 클래스 로더에 의해서 로딩된 클래스가 저장되는 곳, JVM에서 클래스를 실행하면 메소드 영역에서 클래스 정보를 복사
  • 스택 영역 : 호출된(실행된) 메소드 정보사 저장되는 곳으로 실행이 끝나면 저장된 정보는 삭제, 메소드가 실행될 때마다 저장되는 메소드 정보에는 매개변수, 지역변수 등이 있다. LIFO(Last In First Out) 방식으로 동작
  • 힙 영역 : new 명령문으로 인스턴스를 생성하면 메모리의 힙영역에 생성. 힙영역은 JVM에서 가장 중요한 데이터를 저장함과 동시에 세밀한 관리가 이뤄지는 곳, 객체는 클래스가 실행될 때 생성되어서 힙 영역에 저장
  • 레지스터 영역 : JVM이 수행할 명령어의 주소를 저장하는 메모리 공간
  • 네이티브 메소드(OS의 시스템 정보, 리소스를 사용하거나 접근하기 위한 코드) 스택 영역 : 자바 프로그램괴 OS사이에 JVM이 존재, 자바 프로그램은 시스템에 직접 접근하기 어려움.JNI(Java Native Interface) API를 사용하면 자바 프로그램에서 OS시스템에 대한 접근이 가능
스택영역 스택 스택
참조형 변수 name &100주소값 &100 홍길동
참조형 변수 hobby &300 &300 영화
기본형 변수 price 100    
기본형변수 age 21    

 

변수의 값이 같은지 비교

기본 타입 : 변수의 값이 같은지 다른지 조사

참조 타입 : 동일한 객체를 참조하는지 다른 객체를 참조하는지 조사 //클래스, 인터페이스

 

null

  • 변수가 참조하는 객체가 없을 경우 초기값으로 사용 가능
  • 참조 타입의 변수에만 저장가능
  • null로 초기화된 참조 변수는 스택 영역 생성

배열 : 같은 타입의 데이터를 연속된 공간네 저장하는 자료구조.

배열이름 : 배열의 시작주소

인덱스 : 순번을 나타내는 위치 정보

 

#배열 생성

[new 데이터 타입 [요소 수]; ]

 

#배열 변수 선언

[데이터 타입[ ] 변수명;  or  데이터 타입 변수명[ ]; ]

 

배열을 선언하면 사용된 배열명은 배열의 시작주소가 된다.

배열의 이름 = 주솟값

int[ ] numbers; //배열 선언
numbers = new int[5];  //배열 생성
int [ ] numbers = new int[5];  //배열 선언과 동시에 생성

#배열 초기화

[데이터 타입[ ] 배열명 = new 데이터타입[ ]{값1, 값2, 값3,....};]

[데이터 타입[ ] 배열명 = {값1, 값2, 값3,....};]

 

#배열의 길이 구하기

[배열명.length]

 

#if(문자열배열명[인덱스].equals(문자열변수))

 

배열은 1차원 배열과 다차원 배열로 구분 (2차열 배열은 행과 열 두가지 정보를 알아야 접근 가능)

 

#2차원 배열 선언과 생성

[new 데이터 타입[행의 수][열의 수]   //2차열 배열 생성]

[데이터 타입[ ][ ] 변수명;   or   데이터 타입 변수명[ ][ ];   //2차원 배열 생성]

[변수명[행 인덱스][열 인덱스];    //접근하기 위해 행 인덱스와 열 인덱스 지정]

 

#2차원 배열의 초기화

[int[][] array = {{1,2},{3,4}];

 

#2차원 배열에서 length 필드

[배열명.length //행의 길이  or   배열명[행인덱스].length //열의 길이]

 

배열 복사 방법

  • for문 이용
  • Arrays 클래스 이용
  • System.arraycopy() 메소드 이용

[System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

//(원본 배열, 원본 배열 복사 시작 인덱스, 새배열, 새배열 붙여넣기 시작 인덱스, 복사 항목수)]

 

 

+ Recent posts