
180
러닝 Go
와 동일하게 스택에 저장된다. 하지만 앞서 언급했듯이 자바의 객체는 포인터로 구현이 되었
다. 이것은 모든 객체 변수 인스턴스에 대한 포인터만 스택에 할당되고 객체 내의 데이터는 힙
에 할당된다. 기본 값 (숫자, 불리언, 문자 )는 완전히 스택에 저장된다. 이것은 자바의 가비지
컬렉터가 많은 작업을 수행해야 함을 의미한다. 또한 자바의 리스트와 같은 것들은 실제로 포
인터 배열에 대한 포인터라는 것을 의미한다. 그것이 선형 데이터 구조처럼 보인다 해도, 데이
터를 읽을 때 띄엄띄엄 접근하여 매우 비효율적이다. 파이썬, 루비, 자바스크립트도 이런 비슷
한 행동을 한다. 이러한 모든 비효율성을 해결하기 위해 자바 가상 머신에는 많은 작업을 수행
하는 매우 영리한 가비지 컬렉터가 포함되어 있다. 일부는 처리 속도에, 일부는 지연에 대해 최
적화되며 모든 구성 설정은 최상의 성능을 위해 튜닝된다. 파이썬, 루비, 자바스크립트를 위한
가상 머신은 조금 덜 최적화되어 성능 저하가 있다.
이제
Go
가 포인터를 드물게 사용하도록 권장하는 이유를 알 수 있을 것이다. 가능한 많이 스
택에 저장하도록 하여 가비지 컬렉터의 작업량을 줄이도록 하자. 구조체의 슬라이스나 기본 타
입은 빠른 접근을 위에 메모리에 연속적으로 데이터를 정렬한다. 그리고 가비지 컬렉터가