웹 개발/Java

[Java] JVM 메모리 영역, 기본 변수, 참조 변수, equals와 == 연산자 비교, hashcode

K1MY0UNGHAN 2020. 8. 25. 02:03

Java의 hashcode에 대한 궁금증이 생겼을 때, 이는 equals와 == 연산자의 비교로 이어지고, 또 이는 기본 변수와 참조 변수, 나아가 Java 메모리 영역으로 이어진다.

 

  • 자바 메모리 관리 - 스택 & 힙(+ 스코프, 불변 객체, 가비지 컬렉터)
    • 스택
      • Heap 영역에 생성된 Object 타입의 데이터의 참조값이 할당된다.
      • 원시타입의 데이터가 값과 함께 할당된다.
      • 지역변수들은 scope 에 따른 visibility 를 가진다.
      • 각 Thread 는 자신만의 stack 을 가진다.
      • Heap 영역에는 주로 긴 생명주기를 가지는 데이터들이 저장된다. (대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많다)
      • 애플리케이션의 모든 메모리 중 stack 에 있는 데이터를 제외한 부분이라고 보면 된다.
      • 모든 Object 타입(Integer, String, ArrayList, ...)은 heap 영역에 생성된다.
      • 몇개의 스레드가 존재하든 상관없이 단 하나의 heap 영역만 존재한다.
      • Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수가 stack 에 올라가게 된다.
  • equals와 == 연산자의 비교
    • String 타입의 equals는 Object의 equals를 재정의하고 있다.
  • Java의 hashcode