
JVM의 구조와 static
package ex04;
class Person1{// 커스텀 자료형
static int age = 20;
static char gender = '여';
}
public class MemEx01 {
public static void main(String[] args) {
System.out.println(Person1.age);
System.out.println(Person1.gender);
}
}
/**
* JVM은 세 개의 공간으로 나뉘어 있다. (static, heap, )
* 1. JVM이 실행될 때 제일 처음으로 static을 찾는다.
* static(정적 할당)은 main이 실행되기 전에 메모리에 뜬다.
* main이 실행되는 도중에 static을 추가할 수는 없다.
* main이 끝나야 사라져.
* 그래서 static의 생명주기가 제일 길다.
* (main이 실행되기 전에 이미 존재하고, main이 끝나야 사라지기 때문이다.)
* main이 실행되는 도중에 추가하고 싶다면? --> heap(동적 할당)
* 왜 정적, 동적을 나눠서 할당할까? --> 메모리를 효율적으로 활용하기 위해서.
* * 메모리는 값이 비싸고 공간이 한정되어있잖아.
*/
JVM의 구조와 heap
package ex04;
class Person2{
int age = 10;
char gender = '남';
}
//char gender = '남';// 클래스 밖에는 뭘 적을 수 없음
public class MemEx02 {
public static void main(String[] args) {
System.out.println("1년 지남"); // Person2는 여기선 없음
System.out.println("2년 지남"); // Person2는 여기선 없음
System.out.println("3년 지남"); // Person2는 여기선 없음
// Person2는 여기선 없음
Person2 p2 = new Person2(); // 여기서 heap을 띄우면 적어도 1, 2, 3년 동안은 떠있지 않으니 효율적이야.
// heap에 띄울 때는 클래스 이름이 타입이야.Person2
// new는 동적 할당을 하겠다는 뜻!
// static은 클래스명을 쓰고 바로 쓸 수 있지만
// heap은 변수가 필요해. 여러번 불러올 수 있으니까.
System.out.println(p2.age);
System.out.println(p2.gender);
System.out.println("메인 종료");
}
}
클래스로 선언되면 패키지에 클래스 파일이 생성된다.

Share article