본문 바로가기

bitcamp/JAVA

JVM 메모리모델과 Object 클래스

1. JVM 메모리 모델이란?

· 자바 가상머신으로 JVM은 메소드, 스택, 힙 총 3개의 영역으로 메모리 공간을 차지하고 있다.

· 아래와 같이 참조 변수에 null을 대입하는 경우, 인스턴스에 대한 참조 관계가 소멸되면서 힙 영역에서는 객체가 소멸되지 않은

  상태로 메모리를 차지하고 있는데, 이 때 JVM의 Garbage Collection이 힙영역에 있는 인스턴스를 삭제 및 메모리 정리를 한다. 

  (Garbage Collection은 세가지 영역의 메모리를 정리 및 관리)

 

 

2. Object class (equals 메소드)

equals 메소드란?

· Object 클래스의 메소드 종류 중 하나이며, 참조하는 인스턴스를 비교하는게 아닌 내용을 비교해주는 기능을 한다.

· 아래 예시와 같이 == 연산자는 참조 대상을 비교하여 false를 반환하지만, equals는 내용을 비교하기 때문에 true를 반환한다.

 

 

※String 클래스에서 문자열 비교시 equals를 사용하는 이유?

· String에서의 equals는 부모클래스에 있는 equals 메소드를 오버라이딩 하였기 때문에 문자열 비교가 가능하다.

  반드시 자식클래스로 형변환을 실행해줘야 사용이 가능하다. ex: (INum)obj.num

 

 

3. Object class (clone 메소드)

clone 메소드란?

· Object 클래스의 메소드 종류 중 하나이며, clone 메소드를 호출하면 인스턴스의 복사가 실행된다.

  단, 호출을 허용하려면 Cloneable 인터페이스를 구현해야한다. (변수, 내용 모두 동일하게 복사)

· 성능면에서는 new 연산자를 통한 객체 생성보다는 clone 메소드 호출 방법으로 객체를 복사하는 방법이 더 빠르다.

· 객체 복사 방식으로는 Shallow copy와 Deep copy, 두가지 형태로 복사가 이루어진다.

 

 

Shallow copy와 Deep copy의 차이는?  ***중요***

· class 내에 객체 형의 데이터 멤버가 존재할 때 (객체가 아닌 변수가 존재하는 경우는 크게 상관x)
  Shallow Copy의 경우, 해당 객체만 복사하여 사용되고, 세부적인 객체는 따로 복사되지 않기 때문에 값이 공유된다. 
  Deep Copy의 경우, 세부적인 객체까지 복사되어 참조하는 인스턴스가 전혀 다르기 때문에 값이 공유되지 않는다.

 

 

※아래를 참고하여 Rectangle의 shall copy와 deep copy의 메모리를 그리시오. ***중요 외우기!***

 

· Shallow Copy의 경우, clone 호출 시 Rectangle의 Point만 Copy, new Point의 주소까지는 No Copy

 

 

 

 

'bitcamp > JAVA' 카테고리의 다른 글

자바의 기본 class  (0) 2021.01.25
Object 클래스_연습문제  (0) 2021.01.25
예외처리  (0) 2021.01.21
interface와 추상클래스_연습문제  (0) 2021.01.20
interface와 추상클래스  (0) 2021.01.18