자바 메모리 구조 | 설명 |
---|---|
Static Area | - 필드 부분에서 선언된 변수 (전역 변수)와 정적 멤버 변수 (Static),생성자, 메소드가 저장되는 영역 - 프로그램이 종료될 때까지 어디서든 사용 가능 |
Stack Area | - 파라미터와 지역변수의 데이터를 저장하는 영역 - 함수 종료 시 소멸된다. |
Heap Area | - 참조형의 데이터 타입을 갖는 객체(인스턴스), 배열 등의 데이터가 저장되는 영역 - Stack 영역의 공간에서 실제 데이터가 저장된 Heap영역 참조값을 new연산자를 통해 리턴 받는다. - 실제 데이터를 가지고 있는 Heap 영역의 참조값을 Stack영역의 객체가 갖고 있다. |
참조 그림_stack & heap
에제1)
public class Article{
// 전체 게시물(객체)의 수를 나타내기 위해
private static int count = 0;
private int num;
private String title;
public Article(int num, string title){
this.num = num;
this.title= title;
count++; //Article 생성시 count 수 증가
}
public void setCount(int count){
this.count = count;
}
}
public class Main1{
public static void main(String[] args) {
Article.setCount(0);
Article as1 = new Article(1,"첫 번째 글 제목");
Article as2 = new Article(2,"두 번째 글 제목");
Article as3 = new Article(3,"세 번째 글 제목");
System.out.println(as1.count); //결과값이 3
System.out.println(as2.count); // 결과값이 3
System.out.println(as3.count); // 결과값이 3
System.out.println(Article.count); //결과값이 3 -> static 변수는 모두 공유
}
}
예제2)
public class Test {
private String name = "홍길동";
private static String author = "글쓴이";
public static void printMax(int x, int y) {
System.out.println(Math.max(x, y));
}
public static void printName(){
// System.out.println(name); 에러(불가)
System.out.println(author);
}
}