MapleStory Cookie With Halo

☕ JAVA/☕ 개발환경

[JAVA]단순히 정리한 JVM구조와 Memory(+static)

뉴이 NUEY 2023. 1. 8. 22:41
반응형

 

※ 설명하기에 앞서 JVM은 이 페이지에서 설명하는 것보다 복잡한 구조를 가지고 있음을 안내드립니다.
Class / Heap / Stack 으로 나누어 코드의 흐름이 JVM에서 구조를 따라 어떻게 흘러가는 지 간단히 정리했습니다.

 

흐름

JVM을 간단하게 표현한 구조

  1. JVM 은 자바 코드를 컴파일해(javac) 바이트코드(0과 1)로 만듭니다.
  2. 이렇게 하면 어떤 OS에서든 작동할 수 있게끔 만듭니다.
  3. 변환된 바이트코드는 .class 파일에 저장됩니다.
  4. JVM의 Class Loader를 통해 메모리영역을 Load합니다.

 


 

💡 java에서
객체는
참조변수(Heap이나 Method Area 이용)없이 사용할 수 없습니다.

 


 

1. Method Area=Class Area
:JVM이 시작(프로그램실행)과 함께 생성되는 공간
public class Name {

	final static int classVarialbe = 0;
    
    public static int methodname() {
    	return 0;
    }
}

 

  • Staitc 을 Class 소속이라고도 합니다.
    Class와 같이 프로그램 시작시 제일 먼저 실행되기 때문이죠.
    변수명에 Class를 붙일 수는 없으니까? static 이란 단어를 사용하지 않을까..합니다.
  • 따라서 static 변수보다는 cv:Class Variable 클래스 변수로 불립니다.
  • Method Area 소속
    • Class
    • static method(Class Method)
    • static variable(Class Variable)
  • 프로그램 시작부터 끝까지 존재합니다.
    → 따라서 어느 영역에서든 사용이 가능합니다.
  • 하지만 처음부터 끝까지 메모리영역을 차지 하기 때문에
    → 평소에는 static method를 잘 사용하지 않습니다.
  • 보통 유틸 Util 같은 기능모음 Class 같은 경우에만 static method를 볼 수 있습니다.

2. Heap
:객체(instance)와 배열을 처리하는 공간.
ClassName cn = new ClassName();		// 인스턴스 instance
String[] arrayStr = null;			// 배열 array
  • 이렇게 클래스로부터 객체를 만드는 것을 인스턴스(객체)라고 합니다.
  • java의 특징인 GC(garbage collector)의 대상이 되는 메모리공간이 바로 Heap입니다.
❓ Garbage Collector(GC)
새로운 변수명이 붙지 못한 인스턴스값들은 자바가 알아서 Garbage Collector(GC)에 모아 주기적으로 삭제합니다.
※ 사실 자바는 코드로 객체를 직접 제거하는 방법을 제공하지 않습니다.

 


 

3. Stack
:금방 사용되고 금방 사라지는 데이터가 저장되는 곳.

stack을 넣을 때

  • 기본타입 변수
  • 지역변수Local variable
  • 매개변수 parameter
  • 인스턴스변수 instance value
스택만으로는 사용할 수 없기에
(스택이 들어있는)클래스를 인스턴스화 해서 힙영역에 저장해 사용합니다.

stack을 꺼낼 때

LIFO
Last In First Out
스택과 같이 마지막에 저장된 것을 제일 먼저 꺼내는 구조를 말합니다.

 


 

정리

 


조금 헷갈리지만 다시 정리해 보자면

package test;

public class TestPage {

	public static void main(String[] args) {
		
		Tv t = new Tv();
		t.tvVal = 0;
	}
}

class Tv{
	int tvVal;
}
  • Tv t 에서 Tv타입 을 나타낸다.
    인스턴스를 만들 때도 String str = a; int i = 0; 처럼 타입을 적는 겁니다.
  • 여기서 t참조변수 (리모콘 같은) 역할.
    이때 참조변수 t는 Heap 영역에 저장됩니다.
  • new Tv는 클래스를 인스턴스화 한 객체.
    Tv라는 클래스를 new를 붙여 복사해 인스턴스화한 객체라고 보시면 됩니다.
  • = 대입연산자로 객체(new Tv)를 참조변수 t에 연결 해 사용한다.
반응형