자바에는 포인터가 없는 이유

Moondy·2022년 5월 13일
0

포인터란?

  • 메모리의 주소값을 저장하는 변수
  • 어떤 이름(label)이 메모리의 어떤 주소를 가리키고 있는지 정보

자바에는 포인터가 없는 이유

  • 자바에는 참조(Reference)가 있기 때문
  • 포인터 vs 참조
    • 포인터: 메모리를 직접 핸들링 할 수 있음
    • 참조: 메모리를 직접 핸들링할 수 없음
  • 포인터는 주소값을 임의로 변경할 수 있지만 개발자가 실수하면 바로 에거로 이어질 수 있다. Java에서는 개발자의 실수를 방지하기 위해 자바가 메모리 영역을 관리한다
  • GC(Garbage Collector)가 실행될 때 마다 Heap 영역의 객체의 주소가 계속 바뀌기 때문 (자바가 관리)
    • 더이상 stack에서 참조되지 않는 Heap 영역의 객체들은 GC가 제거

GC의 장점

  • 프로그래머 생산성 향상(메모리 관리 직접 하지 않아 실수 적음)
  • 프로그램 보안상 메모리 직접 접근을 제한함으로써 시스템의 안정성과 보안성 보장

GC의 단점

  • 극한의 성능을 발휘해야 하는 프로그램을 작성하려면 C 같이 저수준 제어가 가능한 언어가 가장 좋은데, Java는 개발자가 직접 메모리 관리를 못해 상대적으로 튜닝 불가능
  • garbage collecting이 일어나는 타이밍이나 점유 시간을 미리 예측하기 어렵다. 즉, 예측 불가능하게 일시적으로 정지할 수 있다.
profile
DevOps를 살짝 찍먹하는 BackEnd 개발자

0개의 댓글