[Java] 가비지 컬렉션 알고리즘 종류
·
Java
가비지 컬렉션 알고리즘 종류 JVM이 메모리를 자동으로 관리해주는 것은 개발자의 입장에서 굉장히 유용하다. 그러나 GC를 수행하기 위해 Stop-The-World가 발생하고 이 때문에 애플리케이션이 중지되는 문제점이 발생하기도 한다. 자바가 발전됨에 따라 힙 영역의 사이즈가 커지면서 애플리케이션의 지연 현상이 두드러지게 되었고, 이를 최적화하기 위해 다양한 가비지 컬렉션 알고리즘이 개발되었다. 1) Serial GC 서버의 CPU 코어가 1개일 때 사용하기 위해 개발된 가장 단순한 GC이다. GC를 처리하는 스레드가 1개라 Stop-The-World 시간이 길다. 보통 실무에서는 사용하지 않는다고 한다. 2) Parallel GC Java8의 디폴트 GC이며, Serial GC와 기본적인 알고리즘은 같..
[Java] JVM GC 작동 원리
·
Java
Garbage Collection (GC) 가비지 컬렉션 (Garbage Collection)은 자바의 메모리 관리 방법 중 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말한다. C/C++ 언어에서는 이러한 가비지 컬렉션이 없어 개발자가 수동으로 메모리 할당과 해제를 일일이 해줘야한다. 반면, Java에서는 가비지 컬렉터가 메모리 관리를 대신해주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 하고, 개발자 입장에서는 메모리 관리, 메모리 누구 문제에 대해서는 관리하지 않아도 된다. 장점메모리 누수 방지 : 개발자가 메모리 해제에 대해 신경 쓰지 않아도 되므로, 메모리 누수와 같은 잠재적인 오류를 ..
[Java] JVM(자바 가상 머신)에 대한 모든 것
·
Java
자바 가상 머신(JVM)자바 프로그램을 실행하기 위한 가상 머신이다. 이를 통해 자바 언어로 작성된 프로그램을 특정 운영 체제에 종속되지 않고 실행할 수 있게 해준다. 자바 가상 머신(JVM)의 동작 방식 자바 가상 머신(JVM)의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것이다. 1) 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다. 2) 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트 코르(.class)로 컴파일한다. -> 컴파일 (Compile) 3) Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area(실질적인 메모리를 할당 받아 관리하는 영역)에 올린다. 4) ..
[Java] 자바 변수 4가지 정리 (전역, 지역, 정적, 멤버 변수)
·
Java
자바 변수의 분류 기준 : 메모리 위치와 생명주기 자바에서 변수의 종류를 나눌 때 가장 중요한 기준은 '어디에 저장되고', '언제 생성되며', '언제 사라지는가' 이다. 이는 곧 JVM의 메모리 영역과 직결된다. 변수 종류메모리 영역생명주기지역 변수 (Local Variable)스택 영역메서드가 호출될 때 생성되어, 메서드가 종료될 때 소멸멤버 변수 (Instance Variable)힙 영역객체가 생성될 때 생성되어, 객체가 GC될 때 소멸클래스 변수/정적 변수 (Static Variable)메서드 영역클래스가 로딩될 때 생성되어, JVM이 종료될 때까지 유지전역 변수없음상황에 따라 클래스 변수 또는 멤버 변수로 구현 핵심 변수 3가지 상세 분석 1) 지역 변수 (Local Variable)- 선언 위치..
[Java] 원시타입(Primitive Type)과 참조타입(Reference Type)
·
Java
자바의 모든 데이터 타입은 크게 2가지로 나뉜다. 이 구분은 데이터를 저장하고 다루는 방식, 즉 메모리 작동 원리와 직접적으로 연결된다. 원시 타입 (Primitive Type)- 값을 직접 저장 : 변수가 곧 실제 데이터를 담고 있다. - 빠른 처리 : 스택 영역에서 저장되므로, 메모리에 접근하는 속도가 매우 빠르다. - 8가지 종류 : 자바에는 오직 8가지 원시 타입이 존재한다. - 정수형 : `byte` , `short` , `int` ,`long` - 실수형 : `float` , `double` - 논리형 : `boolean` - 문자형 : `char` 원시 타입의 메모리 작동 원리 int a = 10;int b = a; // a의 값(10)을 복사하여 b에 저장b..