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