JVM 시리즈 - 가비지 컬렉션 알고리즘
가비지 컬렉션 알고리즘 객체의 생사를 판별하는 기준으로 가비지 컬렉션 알고리즘은 ‘참조 카운팅 GC’와 ‘추적 GC(도달 가능성 분석 알고리즘 사용)’로 나눌 수 있다. 각 방법에 대해서는 앞선 글에서 설명했으니 넘어가겠다. 현대 주류 자바 가상 머신은 추적 GC 알고리즘을 사용한다. 세대 단위 컬렉션 이론 현재 상용 가상 머신들이 채택한 가비지...
가비지 컬렉션 알고리즘 객체의 생사를 판별하는 기준으로 가비지 컬렉션 알고리즘은 ‘참조 카운팅 GC’와 ‘추적 GC(도달 가능성 분석 알고리즘 사용)’로 나눌 수 있다. 각 방법에 대해서는 앞선 글에서 설명했으니 넘어가겠다. 현대 주류 자바 가상 머신은 추적 GC 알고리즘을 사용한다. 세대 단위 컬렉션 이론 현재 상용 가상 머신들이 채택한 가비지...
가비지 컬렉션의 원리 가비지 컬렉션이 처리해야 하는 문제는 3가지다. 어떤 메모리를 회술할 것인가 언제 회수할 것인가 어떻게 회수할 것인가 높은 동시성을 달성하는데 가비지 컬렉션이 방해가 되는 상황이 온다면, 자동화된 기술을 적절히 모니터링하고 조율할 수 있어야 한다. 참조 카운팅 알고리즘 객체가 살아 있는지 판단하기 위해서 사...
핫스팟 가상 머신에서 객체 들여다보기 객체 생성 가상 머신 수준에서는 어떤 과정을 거쳐 객체가 생성될까. 자바 가상 머신이 new 명령에 해당하는 바이트코드를 만나면, 이 명령의 매개 변수가, 클래스 파일 내의 상수 풀에 존재하는지 확인한다. 즉, 명령어가 가리키는 참조가 올바른지, 참조가 이미 로딩, 해석, 초기화된 클래스인지 확인한다. 로딩이...
자바 메모리 영역 런타임 데이터 영역 자바 런타임 데이터 영역은 총 5개로 메서드 영역, 가상 머신 스택, 네이티브 메서드 스택, 힙, PC 레지스터로 구성되어 있다. 프로그램 카운터 현재 실행 중인 스레드의 ‘바이트 코드 줄 번호 표시기’이다. 바이트코드 인터프리터는 카운터의 값을 바꿔 다음에 실행할 바이트코드 명령어를 선택한다. 자바 가상 ...
@Dirties Context 란 Spring 에서 통합 테스트 수행 중, 테스트 간 격리성 확보를 위해 사용할 수 있는 방법 중 하나인 @DirtiesContext에 대해서 정리해봤습니다. 공식문서 요약 https://docs.spring.io/spring-framework/reference/testing/annotations/integr...
실용주의 프로그래머 후기입니다. 이 책을 읽게 된 계기는 내가 어떤 개발자인지 말할 수 있는 실마리를 찾고 싶어서입니다. 개발을 처음 시작할 때는 당장 주어지는 것을 만들어 내는 것에 급급했습니다. 개발을 한지 1년이 지났을 땐, 더 생산적이고 견고한 코드를 만들 수 있을지가 궁금했습니다. 이제 개발을 한지 2년차에 접어들면서는, 어떤 개발자...
실용주의 프로젝트 프로젝트의 주제를 개인의 철학과 코딩에서 논점을 옮겨, 프로젝트 전체 차원에서 바라보자. 실용주의 팀 실용주의 팀은 어떤 특징을 가질까? 실용주의 팀은 작다. 구성원이 대략 10~12명 이하여야 하고, 구성원이 추가되거나 빠지는 일은 드물어야 한다. 모두가 서로 잘 알고, 신뢰하며, 의존해야 한다. 실용주의 팀은, 팀 전체가 ...
프로젝트 전에 프로젝트를 시작할 때 요구 사항을 파악해야 한다. 프로젝트가 닻을 올리기 전에 여러 중요한 문제들을 잘 정리해보자. 요구 사항의 구렁텅이 완성이라는 것은 더 이상 더할 것이 없을 때가 아니라, 더 이상 뺼 것이 없을 때 달성되는 것이다. 요구 사항 수집이라는 것은 길에 있는 것을 주워 담는 행위가 아니다. 대부분의 경우엔 ...
코딩하는 동안 코딩은 기계적인 작업이 아니며, 모든 결정이 의식적으로 내려지는 것도 아니다. 따라서 우리가 작성하는 모든 코드를 비판적은 시각으로 바라보고, 개선할 여지를 찾아야 한다. 파충류의 뇌에 기 기울이기 개발을 하면서 코드를 작성하는 것은 자신과 싸움이다. 어느날은 뇌에서 에디터로 코드가 술술 옮겨지지만, 어느 날은 진창에서 오르막길을 ...
동시성 동시성은 둘 이상의 코드 조각이 실행될 때 동시에 실행중인 것처럼 행동하는 것이다. 그리고 병렬성이란 실제로 동시에 실행되는 것이다. 시간적 결합 깨트리기 시간적 결합이 무엇인지부터 알아야 한다. 시간적 결합은 순차적으로 실행되는 플로우가 코드와 결합되어 있는 것을 의미한다. 이런 접근 방식으로 개발을 하면 유연하지 않고, 현실과도 동떨어...