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 데이터는 소멸되는 순간이 정해져 있지 않다.
'빅데이터 > JAVA' 카테고리의 다른 글
[JAVA] String (0) | 2020.05.02 |
---|---|
[JAVA] Scanner (0) | 2020.04.30 |
[JAVA] 객체지향언어(오버로딩, this, 클래스매서드) (0) | 2020.04.29 |
[JAVA] 객체지향언어(생성자, 정보은닉/접근제어 지시자,Static) (0) | 2020.04.29 |
[JAVA] 객체지향언어(Object oriented Programming) [Class, new] (0) | 2020.04.26 |