JAVA_JVM(Java Virtual Machine)

호근·2022년 12월 2일
0

java

목록 보기
8/35

JVM, Java Virtual Machine?

	자바의 바이트코드(.class파일 | )를 OS에 특화된 코드로 변환하여 실행하는 실행기이다.
    
    ** 바이트 코드란 JVM이 알아들을 수 있는 명령어의 집합
    

JVM의 자바코드 실행과정

	1. Java 컴파일러가 Java파일을 Class파일로 컴파일
    2. Class Loader가 Class파일을 JVM의 메모리(Method Area)에 적재
    3. Execution Engine이 Class 파일의 Byte Code를 한 줄씩 읽어 실행
    4. 빈번히 사용되는 코드는 JIT(just-in-time compilation)가 미리 기계어로 번역하여 저장
    

JVM - Runtime Data Area

	1. Method Area
    	a. Method Area == Static Area == Code Area == Class Area
        
        b. Class에 대한 모든 정보가 저장되는 영역 (Static 변수, instance 변수의 선언부, 메서드(선언부+코드), Class Name Type정보)
        
        c. Static Area 영역에 초기화된 데이터는 프로그램이 종료될 때까지 메모리에 적재되어있다.
        
        d. 모든 thread에 공유하는 메모리영역이다.
    
    
    
    2. Heap Area
    	a. 런타임에 생성되는 모든 객체(object)들이 저장된다.
        
        b. Garbage Collector에 의해 관리되는 영역이다.
        
        
        * Method Area와 Heap은 모든 스레드가 공유하는 영역이다.
        멀티스레드 프로그래밍을 할 때, 동기화에 주의해야하는 영역이다.
        
        
        
    3. Stack Area 
    	a. 메서드를 실행하기 위한 정보들이 저장되는 공간.
        
        b. Stack Area에는 Frame이라는 자료구조가 들어가는데, 메서드가 끝나거나 예외가 발생하면 제거(pop)됨.
        
        c. 지역변수들은 block scope를 지니며, scope가 끝난 변수는 메모리에서 제거됨.
        	
	3-1 Frame 
    	a. 메서드의 틀
        b. Frame 내부에는 
        	1. Current Class의 Constant Pool에 대한 Reference.
            2. Local Variables Array(지역변수배열)
            	메서드 내의 지역변수를 담고있는 배열
            3. Operand Stack
           		피 연산값 혹은 연산의 중간값을 저장하기 위한 자료구조
            
            
            
            
    4. PC register
    	a. 현재 실행되고 있는 명령어의 주소를 저장하고 있는 공간
        
    5. Native Method Stack
    	a. C나 C++로 작성된 메서드를 실행할 때 사용되는 스택
        

	* 각 스레드는 하나의 Heap과 Method Area에 동시에 접근할 수 있다.
    하나의 스레드는 다른 스레드의 내부데이터에 접근할 수 없다.
    지역변수의 동시성 문제를 걱정하지 않아도 되는 이유이다.
profile
22.11.28 ~

0개의 댓글