ETC/ReMind
[GC] GC
면접 질문 단골인 GC에 대해 매일같이 탈탈 털리던중, 하루 날잡고 공부해야겠다 생각하였고, 그 내용을 정리하고자 한다. 다양한 블로그 글을 읽으며 간단하게 GC의 동작은 이렇게 동작하는거 같다고 생각한다. Heap영역에서 참조되고 있지 않은 대상(가비지)을 찾아 삭제한다(힙의 메모리를 회수). 1. 그래서 그 대상을 어떻게 찾는건데....? 여기서 가비지인지 판단하기위해, 힙 영역에 객체를 사용되는(Reachable)것과 사용되지 않는 (Unreachable)의 상태로 구분하여 사용되지 않는 객체를 대상으로 판단하고 GC작업을 수행한다. 즉 사용되지 않는 상태라하면, 그 누구도 참조하지 않는 대상을 말한다.(혼자 메모리에 살아 있는놈) 힙에 있는 객체들에 대한 참조는 4가지중 하나 힙 내의 다른 객체에..
[JPA] 엔티티의 생명주기
엔티티에는 4개의 상태가 존재한다 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed): 영속성 컨텍스트에 저장된 상태 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) : 삭제된 상태 비영속 - 엔티티 객체를 생성한 직후 아무것도 안한 상태로 순수한 상태(저장하기 전 상태) 영속 - 엔티티 매니저를 통해 엔티티 영속성 컨텍스트에 저장한 상태 , 즉 영속성 컨텍스트에 의해 관리된다는 뜻\ - em.persist() 준영속 - 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않는 상태, - 영속성 컨텍스트가 관리하지 않으려면 em.detach()를 호출하면 됨, 또는 em.close(), em...
[JPA] 영속성 컨텍스트
엔티티를 영구 저장하는 환경 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 특징: - 영속성 컨텍스트는 엔티티를 식별자 값(@Id로 테이블의 기본 키와 매핑한 값)이 없으면 예외가 발생한다. 영속 상태는 식별자 값이 반드시 있어야 한다. - JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데, 이것을 플러시라고 한다. 장점: - 1차 캐시 : 영속성 컨텍스트는 내부에 캐시를 가지고 있고, 이것을 1차 캐시라고 한다. 영속 상태의 엔티티는 모두 이곳에 키는 @Id로 매핑하고, 값은 엔티티 인스턴트 형태로 저장된다. 1. 조회가 발생시, 1차 캐시에서 식별자 값으로 엔티티를 찾는다. 만약 엔티티가..