[Java] JVM 알아보기 - (6) Thread, Java Thread Model
2022. 12. 5. 14:11
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 마지막 포스팅입니다. 이번 포스팅에서는 Thread 와 Java Thread Model 에 대해 알아보겠습니다. Thread 우리가 자바 프로그램을 실행하면 JVM 프로세스가 실행되고, JVM 프로세스 안에서 GC 를 포함한 여러 개의 스레드가 실행된다. 그리고 각 스레드마다 Java Stack, PC Register, Native Method Stack 이 존재한다. 이렇게 자바는 동일한 메모리를 읽지만 각각 작업을 수행하는 스레드들, 즉 멀티 스레드를 통해 동시에 여러 작업을 수행한다. 자바는 왜 프로세스를 여러 개 추가하지 않고 스레드라는 개념을 만든 것일까? 그 이유는 프로세스를 생성하려면 많은 시간과 자원이 필요하..
[Java] JVM 알아보기 - (5) JVM GC 유형, G1 GC
2022. 11. 29. 22:06
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 다섯 번째 포스팅입니다. 이번 포스팅에서는 JVM GC의 여러 유형에 대해 살펴보고, 그 중 G1 GC 에 대해 자세히 알아보겠습니다. 지난 포스팅에서 이야기한 것과 같이 GC 에는 여러 유형이 있다. 그 중 몇 가지를 알아보도록 하자. Serial GC 직렬 GC 단일 스레드로 작동하는 가장 간단한 GC 다. 따라서 다중 스레드 프로그램에서는 사용하지 않는다. 단일 스레드를 사용하면 여러 스레드 간에 통신 오버헤드가 없기 때문에 효율성이 높다. Young 영역의 GC 는 지난 포스팅에서 설명한 방식과 같고, Old 영역의 GC 는 Mark-and-Sweep-Compact 알고리즘을 사용한다. 메모리가 적고 CPU 코어의 ..
[Java] JVM 알아보기 - (4) JVM GC, Heap
2022. 11. 27. 23:51
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 네 번째 포스팅입니다. 이번 포스팅에서는 JVM 의 GC 와 Heap 에 대해서 알아보겠습니다. JVM GC(Garbage Collection) 개발자는 직접 자바의 메모리 관리를 하지 않아도 된다. 메모리 관리를 JVM 이 알아서 하기 때문인데, JVM 내에서 메모리 관리를 해주는 것을 가비지 컬렉터 라고 부른다. 가비지 컬렉터는 힙에서 사용 가능한 모든 객체를 추적하고 사용하지 않는 객체에 할당 된 메모리를 해제한다. 이 작업을 가비지 컬렉션, GC 라고 한다. GC 의 프로세스를 알아보기 이전에, 먼저 GC 와 관련 된 개념들을 정리해보자. UnReachable Object 유효한 참조가 없는 객체를 UnReachab..
[Java] JVM 알아보기 - (3) JVM Memory Structure
2022. 11. 23. 01:23
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 세 번째 포스팅입니다. 이번 포스팅에서는 JVM 메모리 구조에 대해서 알아보겠습니다. JVM Architecture 지난 포스팅에서 이야기한 것과 같이, ClassLoader 는 ".class" 파일에서 바이너리 데이터를 생성하여 Method Area 에 저장한다. JVM Architecture 그림을 보면 Method Area 는 Runtime Data Areas 의 한 부분이다. JVM 은 OS 로부터 프로그램 실행 중에 사용되는 메모리 영역을 할당받는데, 이를 Runtime Data Areas 라고 한다. 앞으로 설명할 Method Area 나 Heap Area 는 JVM 의 스펙에 정의되어 있는 논리적 개념이다. 모..
[Java] JVM 알아보기 - (2) JVM ClassLoader
2022. 11. 17. 21:59
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 두 번째 포스팅입니다. 이번 글은 JVM 의 구성 요소 중 하나인 ClassLoader 에 대해서 알아보겠습니다. JVM Architecture JVM 의 구성요소는 크게 세 가지다. Class Loader Subsystem Runtime Data Areas Execution Engine 이번 포스팅에서는 먼저 Class Loader 부터 알아보도록 하자. ClassLoader의 동작 과정 Java 클래스는 한 번에 전부 메모리에 로드되지 않고 사용 시점에 로드된다. 이 때 클래스 로더가 JRE 에 의해 호출되고, 동적으로 클래스를 메모리에 로드한다. 클래스 로더는 주로 Loading, Linking, Initializat..
[Java] JVM 알아보기 - (1) JDK, JRE, JVM
2022. 11. 16. 00:08
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 포스팅입니다. 이번 글은 JVM 의 동작 방식을 알아보기 이전에 JDK, JRE, JVM 의 개념을 정리해보겠습니다. JDK(Java Development Kit) Java 프로그램 개발에 사용되는 소프트웨어 개발 환경 키트다. JRE, 인터프리터/로더, 컴파일러(javac), 아카이버(jar) 등 Java 개발에 필요한 기타 도구가 포함된다. JRE(Java Runtime Environment) 개발할 수 없는, 실행만을 위한 환경이다. Java HotSpot 클라이언트 및 서버 가상 머신을 포함한 JVM 과 각종 라이브러리 등으로 구성된다. JVM(Java Virtual Machine) 보통 자바 프로그램이 수행되는 프..
[Java] Generic 과 WildCard
2022. 8. 31. 01:40
Java
제네릭 Generic 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면 이를 제네릭 클래스 혹은 제네릭 인터페이스라고 한다. 우리가 흔히 사용하는 List 인터페이스를 보자. 리스트 인터페이스는 원소의 타입을 나타내는 타입 매개변수 E를 받고 있기 때문에 List 나 List 등으로 사용할 수 있다. 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭 타입 이라고 한다. (참고) Raw Type 은 사용하지 말라 제네릭 타입을 정의하면 Raw Type 도 함께 정의된다. List 를 정의했다면 로 타입은 List 다. Raw Type 을 사용한다는 것은 다음과 같다. List strings = new ArrayList(); strings.add("100"); strings.add(Integer.valueO..
[Java] Wrapper class 와 일급 컬렉션
2022. 8. 25. 00:41
Java
Wrapper class 자바의 기본 자료형(Primitive Data Type)을 객체로 취급하기 위해 사용하는 클래스 기본 타입의 데이터를 객체로 포장하기 때문에 Wrapper class 라고 부른다. java.lang 패키지에 정의되어 있다. Use Case 1. 제네릭 클래스는 객체만 처리한다. 제네릭 클래스를 이용하기 위해서는 기본 타입 데이터를 래핑해서 사용해야 한다. 2. java.util 패키지의 클래스는 객체만 처리한다. java.util 패키지에 포함 된 클래스 AbstractCollection, AbstractList, AbstractSequentialList, LinkedList, ArrayList, Vector, Stack, AbstractSet, HashSet, LinkedHas..