이펙티브 자바 - 다 쓴 객체 참조를 해제하라

다 쓴 객체 참조를 해제하라 JDK 8버전 Stack 코드 문제점 public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; // 문제 발생! } private void ensureCapacity() { if (elements.length == size) elements = Arrays.copyOf(elements, 2 * size + 1); } } JDK 8버전에서는 현재 index를 변경해서 stack의 top을 관리하지만, pop()을 할 때 TOP의 값을 줄이기만 합니다. 이 부분에서 메모리 누수가 발생합니다. ...

December 20, 2023 · Lee WooJin

Java GC (Garbage Collection) 이해하기

GC란? 프로그램이 동적으로 할당했던 (heap 영역) 메모리 영역 중 필요 없게 된 영역을 여러 알고리즘을 통해 해제하는 것입니다. 장점 메모리 누수 방지 해제된 메모리에 접근 방지 해제한 메모리 또 해제 방지 단점 GC 작업은 순수 오버헤드 개발자는 언제 GC가 메모리를 해제하는지 모릅니다 GC 알고리즘 Reference Counting 객체에 접근할 수 있는 카운팅 넘버를 통해 현재 참조 중인지 확인하는 알고리즘 문제점: 힙 객체가 서로 참조하고 있으면 순환 참조로 GC 제거 대상에서 제외됨 ...

November 9, 2023 · Lee WooJin