Kim-Baek 개발자 이야기

자바 기본 (12) - 자바의 메모리 영역, 호출 스택 본문

개발/java basic

자바 기본 (12) - 자바의 메모리 영역, 호출 스택

김백개발자 2020. 10. 3. 02:40
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다

◎ 자바의 메모리 영역


※ class loading : 하드에 있는 자바파일을 cpu 가 빠르게 처리하기 위해 Main Memory 에 올리는 것(JVM이 처리)
1. Heap (힙) 영역 - instance 가 저장되는 영역 - instance 변수
2. execution stack (실행스택) 영역 - 실행 중인 메소드의 지역변수들이 저장되는 영역
3. 메소드 (class) 영역 - class 변수(class 코드)들이 저장되는 영역

public class Worker {              <- main 함수에서 workMethod(20)을 부른 상태
 public void workMethod(int param){
  int var = param + 20;
  boolean bVar = var > 25? true : false;
  Person per = new Person();
  Person per2 = new Person();
  per.setAge(20);
  System.out.println(per.getAge());
 	}
 }
 
class Person{
 private String name;
 private int age;
 
 public int getAge(){
  return age;
 }
 public void setAge(int age){
  this.age = age;
 }
}


 

-> age 같은 경우 코드는 하나인데 실행되는게 두개가 될 수 있다. 각 객체에 따른 구분을 하기 위해 무조건 처음에 this 를 생성하게 된다(이 메소드를 가진 객체의 주소!)
- 끝나면 stack 영역은 삭제된다.

◎ 객체배열
Person [ ] p = new Person [ 3 ];
p [ 0 ] = new Person( );
p [ 1 ] = new Person( );            p 의 타입 -> Person[ ] (배열!)
p [ 2 ] = new Person( );            p[ n ] 의 타입 -> Person
= Person [ ] p = {new Person( ), new Person( ), new Person ("김영수", 30) };

※ 배열도 객체 -> index 가 instance 변수라 생각! default 초기화 O
※ 객체의 default 는 null 이다.

int [ ] i = { 10, 20, 30 }  -> 코드의 위치에 따라 heap, stack 둘 중 하나에 위치

※ "김영수"를 찍는다면 -> p[2].name;
           
                         -> p[n].instance 멤버

※ 이클립스의 기능
새로만들기 ->  file :  일반 텍스트 파일을 만드는것
class 만들기 단축아이콘 왼쪽 -> 패키지 만들기

반응형
Comments