Java Virtual Machine

ZiSoOm·2021년 5월 30일
0

기초자바

목록 보기
14/15

🧨JVM

  • 자바로 만들어진 프로그램이 실행되는 컴퓨터 안의 가상 컴퓨터
  • 운영체제 -> JVM -> 자바 프로그램
  • 장점 : 운영체제에 상관없이 실행할 수 있음
  • 단점 : 속도가 느림

🧨JVM 메모리 구조

  • Method Area (메서드 영역) : 클래스 멤버가 저장됨(static 붙은 멤버가 주로)
  • Heap : 객체가 저장됨
  • Call Stack (호출 스택) : 현재 호출되어 있는 메서드가 저장됨

🧨JVM 과정 이해하기

package oop;

public class JVM {

	public static void main(String[] args) {
		/*
		 	프로그램 실행 시
			main(), classVar, classMethod()가 MethodArea에 저장됨 (static 붙은 멤버)
			main()이 호출되어 CallStack에 저장됨
			main()메서드 실행할 때, static이 있기 때문에 static이 붙지 않은 
			instanceVar나 instanceMethod()는 아직 메모리에 올라와 있지 않음
		 */
		
		System.out.println(classVar);
		//System 클래스의 out이 MethodArea에 저장됨
		//println()이 호출되어 CallStack에 저장됨
		//println()이 classVar를 출력 후 CallStack에서 삭제됨
		//out이라는 변수에 static이 붙어있어서 객체 생성하지 않고도 호출해서 사용가능
		
		classMethod();
		//classMethod()가 호출되어 CallStack에 저장되고 메서드의 내용을 수행 후 삭제됨
		
		JVM jvm = new JVM();
		//JVM 객체가 Heap에 저장됨 (객체 생성)
		//jvm 변수가 CallStack에 생성되고, JVM 객체의 주소가 저장됨
		//지역변수 생성됨
				System.out.println(jvm.instanceVar);
		//println()이 호출되어 CallStack에 저장됨
		//println()이 instanceVar를 출력 후 CallStack에서 삭제됨
		
		jvm.instanceMethod();
		//instanceMethod()가 호출되어 CallStack에 저장되고, 메서드의 내용을 수행 후 삭제됨
		
		jvm = null; //jvm은 참조형 타입 => 기본 값 null을 넣을 수 있음
		//jvm 변수에 null이 저장됨
		//어디에서도 주소를 참조하지 않는 JVM 객체는 GarbageCollector에 의해 삭제도미
		
		//main()의 실행이 종료되어 CallStack에서 삭제됨
		//프로그램이 종료되고 MethodArea의 데이터가 삭제됨
	}
	int instanceVar;
	static int classVar;
	
	//이 클래스의 객체 생성을 해야 메서드 사용할 수 있음
	//=> 객체 생성하고 나면 둘다 메모리에 올라와 있음
	void instanceMethod() {
		System.out.println(instanceVar);
		System.out.println(classVar); //인스턴스메서드 안의 클래스 변수 사용 가능
	}
	
	//객체 생성하지 않고 사용하기 위해 static을 붙임 
	//=> 객체 생성하기 전에 호출하면 instanceVar는 메모리에 올라와 있지 않음
	static void classMethod() {
		//System.out.println(instanceVar); //클래스 메서드 안의 인스턴스 변수 사용 불가
		System.out.println(classVar);
	}
}

0개의 댓글

관련 채용 정보