JVM(Java Virtual Machine) 이란?JVM은 Java Virtual Machine의 줄임말로 직역하면 자바를 실행하기 위한 가상 컴퓨터라고 할 수 있다. 자바는 OS에 종속적이지 않는다는 특징을 가지고 있는데, OS에 종속받지 않고 CPU가 자바를 인식, 실행할 수 있게 해주는 것이 바로 JVM이다. 자바의 특징 중 하나인 자동 메모리 관리(Garbage Collection) 또한 JVM이 수행한다. 자바 소스코드, 즉 원시 코드(*.java)는 CPU가 인식 하지 못하므로 기계어로 컴파일 해줘야 한다.하지만 자바는 JVM을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아닌 JVM이 인식할 수 있는 바이트 코드(*.class)로 변환된다. 자바 코드를..
이번에는 Garbage Collection 알고리즘에 대해 알아보도록 하자.GC를 수행하기 위해 Stop-The-World가 발생되고 이 때문에 애플리케이션의 지연 현상이 두드러지게 되었고, 이를 막기 위해 다양한 가비지 컬렉션 알고리즘이 나왔다. Serial GC싱글 스레드로 동작하며 Serial GC의 Young 영역은 이전 게시글에서 보았던 알고리즘(Mark-and-Sweep)대로 수행된다. Old 영역에서는 Mark-Sweep-Compaction 알고리즘이 사용되는데, 기존의 Mark-And-Sweep에 Compact라는 작업이 추가되었다. Compact는 heap 영역을 정리하기 위한 단계로 Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로..
가비지 컬렉션(Garbage Collection)이란?가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 사용하지 않는 메모리 영역을 주기적으로 삭제하는 프로세스를 말한다. C나 C++에서는 가비지 컬렉션 없이 개발자가 수동으로 메모리 할당과 해제를 일일이 해줘야 하는 반면 Java는 가비지 컬렉터가 메모리 관리를 대신 해주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 하고, 개발자는 메모리 관리, 메모리 누수(Memory Leak) 문제에 대해 완벽하게 관리하지 않아도 되어 개발에만 집중할 수 있다는 장점이 있다. (가비지 컬렉션은 꼭 자바에만 있는 개념이 아니다. ..
가변 객체(mutable Object)란?가변 객체는 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태가 변경 가능한 객체이다. 멀티 스레드 환경에서 사용하려면 별도의 동기화 처리가 필요하며, 대표적인 가변 객체로 ArrayList, HashMap, StringBuilder, StringBuffer 등이 존재한다. 이 외에도 개발자가 커스텀 객체를 생성하여 내부 상태를 변경할 수 있게 만든다면 그것도 가변 객체가 된다. 불변 객체(Immutable Object)란?불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메서드만을 제공하며, 객체의 내부 상태를 제공하는 메서드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다...