System.out.println(); 일반적으로 무엇인가를 출력하고 싶을 때 사용하는 명령어 입니다.

 

위의 명령을 가능하게 만어주는 것은 system 덕분입니다.

 

System : java.lang 패키지에 묶여있는 클래스의 이름으로 import java.lang 자동 삽입되므로 System이란 이름을 직접 쓸 수 있게해줍니다.

 

out : static 변수이되 인스턴스를 참조하는 참조 변수 입니다. out 은 PrintStram의 인스턴스 입니다.

 

Println 은 PrintStream의 메소드 입니다. Println 넘겨 받은 데이터를 출력합니다.

 

System. Out 을 선언 할 수 있었던 것은 printstrem static 붙어있기 때문입니다. Out. 이라고 입력하여 printstream의 값으로 가도록 만듭니다. 그 안에 들어있는 오버로딩으로 여러 값들이 정의 되어 있는데 그 중에 println 의 값을 호출하도록 만듭니다.

public class System{
    public static final printstream of ;
}

 static final로 선언되었으니, 인스턴스의 생성없이 System.out 이라는 이름으로 접근 가능합니다.

-> System.out.println(); System 클래스의 멤버 out이 참조하는 인 스턴스의 println 메소드를 호출하는 문장이다. 

 

 

 

자바의 메모리 모델 

 

Jvm은 운영체제 위에서 동작합니다.

- 운영체제가 jvm을 포함해서 모든 응용프로그램에게 동일한 크기의 메모리 공간을 할당할 수 있는 이유는 가상메모리

  기술에서 찾을 수 있습니다.

- jvm은 운영체제로 부터 할당 받은 메모리 공간을 기반으로 자바프로그램을 실행해야 합니다.

- jvm은 운영체제로 부터 할당 받은 메모리 공간을 이용해서 자기 자신도 실행하고, 자바 프로그램도 실행합니다.

 

 

메모리

 

  1. Method 영역 (java 자료형의 method와 다름) : 메소드의 바이트코드, static 변수

 

  • data 가 담기면 프로그램 시작~종료까지 지우지 않고 data 보관합니다.
  • 프로그램이 종료되는 시점 data가 사라집니다.
  • .class 파일을 메모리에 올리고 있었는데(실행코드) 이것이 method 영역입니다.

  

  2. Stack 영역 : 지역변수, 매개변수

 

  • 필요한 순간 java가 할당해주고 java의 판단에 의해서 data를 소멸시켜주는 영역입니다.
  • Java의 판단 : 조건문, 반복문, method와 같이 자신의 영역을 가지고 있습니다.
  • 지역변수를 stack 메모리에 저장합니다. (영역 밖으로 나가면 자동소멸)

  

   3. Heap 영역 : 인스턴스

 

  • 인스턴스가 생성되는 메모리 영역입니다.
  • 요청시에 할당되는 메모리 영역입니다.
  • New에 의해서 할당되어지는 메모리 영역입니다.
  • 자바가 알아서 소멸 시키고 우리는 그 시기를 알 수 없습니다.

 

- 인스턴스는 참조가 이뤄지지 않으면 소멸의 대상디 됩니다. jvm 은 인스턴싀 참조관계를 통해서 소멸 대상을 결정합니다.

 

- Stack의 할당되어지는 메모리는 자동 소멸되지만, heap 데이터는 소멸되는 순간이 정해져 있지 않다.

+ Recent posts