본문 바로가기

취준, 대외활동/커널360

사전과제 9일차 :

할 것도 많고 시간이 빡빡하니 강의를 빠르게 빠르게 넘기고 있다

 

5-2 기본배열과 객체배열

Student[] std = new Student[4]; 로 객체의 배열을 만들 수 있고 인덱스로 접근 가능함.

 

6-1,2,3 static과 메모리의 관계


메인 함수는 static이고 객체를 생성하지 않는다.
static 멤버들은 그 클래스를 사용하는 시점에 정해진 메모리 위치에 단 한번 로딩되고, 호출된 메서드는 call stack frame area(Stack area)에 기계어코드 push 한 뒤 동작을 시작한다.
stack area에서의 함수의 실행은 C언어와 비슷하게 돌아감. LIFO. PC를 보고 현재 프로그램 실행 위치를 알 수 있음. stack 에 아무것도 없으면 프로그램이 종료됨. 메서드 안의 지역변수는 메서드의 종료와 함께 사라짐. 

method area에는 static-zone 와 non-static-zone이 있음

non-static 멤버들의 접근 방법은 - non static 한 공간에 객체를 생성하면서 메모리(Heap Area)에 로딩 시키는 것임. new 키워드로 생성된 객체들은 Heap Area에 저장됨

static이 안 붙은 메서드는 객체를 생성하므로 -> 인스턴스메서드라고 부른다
static이 붙은 메서드는 객체를 생성하지 않으므로 -> 클래스메서드라고 부른다. 클래스이름.호출메서드 로 접근 가능

자주 사용해야 하는 메서드는 static으로, 클래스 메서드로 만드는게 합리적이다. 인스턴스메서드는 객체를 생성할 때/제거할 때 오버헤드가 있을 테니까.

 

궁금한 부분 -> 객체에 커다란 데이터가 들어갈 때 메모리 주소가 어떤식으로 변하는지 코드를 짜 보면서 알아보자
-->>> 불가능!! System.identityHashCode([변수명]) 함수를 통해 어떻게 어떻게 하던데 이 값이 실제 주소값을 의미하는 것도 아니며, 자바에서 메모리 주소를 알아보려는 짓은 의미없다는 답을 얻었다. C언어의 패러다임으로 자바를 보지 말라고 함.

Heap 공간에 Generation이라는 말이 붙기도 한다. 그 이유는 GC가 힙 공간의 객체들을 관리할 때, 오래 사용된 객체에는 높은 Generation, 방금 들어온 객체에는 낮은 Generation을 붙이고 나중에 Search할 때 높은 Generation의 것들부터 검색해 처리하기 때문.