본문 바로가기
프로그래밍 언어/Java

Java) 10/22 - 객체가 메모리에 올라가는 순서

by nomfang 2021. 10. 22.
728x90
반응형

메모리 영역

메모리 영역은 JVM

stack과 heap으로 구분된다

객체 생성시 메모리에 올라가는 순서

  1. 객체를 담는 변수가 Stack 영역에 올라감
  2. Heap 영역에 객체의 필드에 묵시적 초기화 된 값이 올라감
  3. Heap영역 필드에 각각 라벨링 (주소 값 할당)
  4. Stack의 변수가 Heap의 라벨링 된 필드 주소를 참조
  5. heap 필드 영역에 명시적 초기화 값 전달

필드의 초기화

묵시적 초기화: 기본 값으로 채워지는 것
명시적 초기화: 사용자가 정의한 값으로 초기화 되는 것

new 객체()

생성자를 통해 객체 생성 시 heap 영역에 객체의 필드가 올라간다
생성되는 객체의 필드는 기본 값을 가진다 (값이 있어야만 메모리 영역에 올라갈 수 있음)

메소드는 메모리 영역 중 Method Area에 따로 저장된다

객체 생성의 결론은 라벨링(주소 값 할당)

객체를 만들기 위해 class는 데이터 type으로 작동

  • 변수의 주소 값이 같으면 서로 같은 객체를 참조 중인 것

  • 쓰레기 객체: stack영억으로 부터 참조가 끊어진 객체는 접근할 수 없기 때문에 사용 불가

  • 가비지 컬렉터가 자동으로 관리해줌 (대신 개발자가 직접 관리하는 기능은 없음)
    -> 언제 제거하는지 알 수 없고 상대적으로 느림

가비지 컬렉터

쓰레드로 만들어짐 -> 우선 순위에 따라 cpu 점유를 하기 때문에
느리게 제거되더라도 뻑나는 일은 없다..! (쓰레기 객체가 많아짐에 따라 우선 순위가 높아짐)

참조 변수의 출력

참조 변수의 출력 시 String으로 출력됨 (toString()이 생략된 것)

반응형

'프로그래밍 언어 > Java' 카테고리의 다른 글

Java) 10/25- VO Class와 JDBC  (0) 2021.10.25
Java) 10/25 - Class 배열  (0) 2021.10.25
Java) 10/21 - 관계  (0) 2021.10.21
Java) 10/20 - 생성자  (0) 2021.10.20
Java) 10/20 - 필드와 메소드  (0) 2021.10.20

댓글