[Java] 클래스/인스턴스 생성과 메모리 할당

bagt13·2022년 5월 10일
0

JAVA

목록 보기
2/7
post-thumbnail

인스턴스 생성 시 메모리의 상태

Car c1 = new Car();

Car : 클래스 영역에 Car 클래스가 로드된다.

c1(참조변수) : 참조변수는 스택 영역에 로드되며, 객체의 실제 값이 아닌 힙 메모리 영역에 저장된 주소값을 가리킨다.

new : 실제로 객체 생성을 수행한다.

Car() : 이 생성자로 인스턴스가 생성되어 힙 메모리 영역에 로드된다.


인스턴스를 생성하면 메서드를 제외한 모든 데이터들은 힙 메모리 영역에 저장되지만,
메서드는 클래스 영역에 저장된다. 그래서 객체를 생성할때마다 선언하는 것이 아니라, 클래스 영역의 메서드를 찾아 사용하는 것이다.



멤버변수와 지역변수

  • 멤버 변수와는 다르게 지역변수는 스택 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸되어 더이상 사용할 수 없게 된다.

  • 또한 스택 메모리에 저장되는 지역변수는 한동안 사용하지 않는 경우 가상 머신에 의해 자동으로 삭제된다.

또한 멤버 변수는 선언만 하고 직접 초기화를 실행하지 않아도 강제로 초기화가 이뤄지지만, 지역 변수는 초기화를 하지 않으면 컴파일 에러가 발생한다.

힙 메모리 영역에는 빈 공간이 저장될 수 없기 때문에 이곳에 저장되는 필드는 강제로 초기화되지만, 스택 영역은 강제로 초기화되지 않으므로 지역 변수는 선언시 반드시 초기화를 실행해주어야 한다.



Object와 Instance의 차이

보통 객체와 인스턴스라는 용어를 혼용하여 사용하지만, 엄밀히 따지면 다른 뜻을 가지고 있다.

Object(객체)는 클래스로 구현한 대상을 의미하고, Instance는 메모리에 할당된 데이터를 의미한다.


부족한 부분

  • JVM의 구조와 객체 생성 시 내부적으로 일어나는 일들
profile
주니어 백엔드 개발자입니다😄

0개의 댓글