[java] 변수와 메모리 구조

sesame·2021년 8월 4일
0

Java

목록 보기
13/25

> static: 프로그램이 종료되어야만 사라짐!! / 모두가 참조할 수 있는 공용 데이터

  • 메소드가 저장되는 공간(프로그램 시작~종료)

  • Garbage Collection 관여 x → static 남발하면 시스템 성능에 악영향 줄 수 있음

  • 클래스 변수(정적 변수, 생성자, 메소드, 멤버 변수, 전역변수 등)

  • //Run 시작도 전에 메모리를 가지고 있는 애

정적변수 사용 EX1)

class Number{
     static int num = 0; //클래스 필드
     int num2 = 0; //인스턴스 필드
}
public class Static_ex {
     public static void main(String[] args) {
          Number number1 = new Number(); //첫번째 number
          Number number2 = new Number(); //두번째 number
          number1.num++; //클래스 필드 num을 1증가시킴
          number1.num2++; //인스턴스 필드 num을 1증가시킴
          System.out.println(number2.num); //두번째 number의 클래스 필드 출력  //1
          System.out.println(number2.num2); //두번째 number의 인스턴스 필드 출력   //0
     }
}

정적 메서드 사용 EX1)

class Name{
     static void print() { //클래스 메소드
     System.out.println("내 이름은 홍길동입니다.");
}
void print2() { //인스턴스 메소드
     System.out.println("내 이름은 이순신입니다.");
     }
}
public class Static_ex {
     public static void main(String[] args) {
          Name.print(); //인스턴스를 생성하지 않아도 호출이 가능
          Name name = new Name(); //인스턴스 생성
          name.print2(); //인스턴스를 생성하여야만 호출이 가능
     }
}

> Heap

  • new 연산자에 의해 동적으로 할당하고 저장되는 공간

  • Stack에 존재하는 다른 메소드에 의해 참조될 수 있다. 참조 변수 사라지면 Garbage Collection이 자동으로 해제

> Stack

  • 메소드(함수)를 호출하면 자동 생성하고 메소드(함수)가 끝나면 자동 소멸한다.
  • 프로그램이 자동으로 사용하는 임시 메모리 영역
    //double 이면 8byte int면 4byte
    //Stack은 4byte짜리 주소를 가지고 있는데 이게 힙 주소

0개의 댓글

관련 채용 정보