본문 바로가기

Java22

[Java] JVM 이란? JVM이란 무엇인가Java Virtual Machine의 줄임말.직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다.Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다. 컴파일 과정Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.하지만 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.cl.. 2024. 6. 4.
[Java] Garbage Collector (GC) Garbage Collection(GC) 이란?가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다. OOM (out of memory)JVM이 Heap 영역에 새로운 객체를 할당할 수 없을 때 발생하는 에러이다.GC에 의해 Heap 메모리가 청소되지 않으면 해당 메모리가 계속 쌓이고, 새로운 객체를 Heap 메모리에 할당하는 것이 불가능 해지는 상황  C / C++ 언어에서는 이러한 가비지 컬렉션이 없어 프로그래머가 수동으로 메모리 할당과 해제를 일일이 해줘야 했었다.반면 Java에서는 가비지 컬.. 2024. 6. 3.
[Java] Thread-Pool 이란? 스레드 풀 개념작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고, 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아 처리하는 기법병렬 작업 처리가 많아지면 스레드 개수가 중가되고, 그에 따른 스레드 생성과 스케줄링으로 인해 CPU가 바빠져 메모리 사용량이 늘어난다. 이는 애플리케이션의 성능 저하로 이어진다.병렬 작업의 폭증으로 인한 스레드의 폭증을 막으려면 스레드 풀을 사용해야 한다.스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다.작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리한다.따라서 작업 처리 요청이 폭증해도 작업 큐라는 곳에 작업이 대기하다가 여유가 있는 스레드가 그것을 처리하므로 스레드.. 2024. 4. 30.
[Java] 데몬스레드 데몬 스레드(Daemon Thread)란?리눅스, 유닉스 계열의 운영체제에서 백그라운드로 동작하는 프로그램을 데몬(Daemon)이라고 한다. 자바에서 이런 데몬과 유사하게 동작하는 쓰레드를 데몬 스레드(Daemon Thread)라고 한다.즉, 데몬 쓰레드란 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드이다. 데몬 스레드는 자바 프로그램을 만들 때 백그라운드에서 특별한 작업을 처리하게 하는 용도로 만든다. 주 스레드(main 등)가 모두 종료되면 강제적으로 종료되는 특징이 있다.데몬 스레드 만들기데몬 스레드를 만드는 방법은 스레드에 데몬 설정을 하는 것이다.thread.setDeamon(true); // Runnable을 구현하는 DaemonThread클래스를 작성 public cla.. 2024. 4. 30.
[Java] Pass By Value와 Pass By Reference의 차이 1. Pass By Value(Call By Value)에 대한 이해 [ Pass By Value(값에 의한 전달)의 의미 ] Pass By Value(값에 의한 전달)는 복사된 데이터를 전달하여 구성함으로써, 값을 수정하여도 원본의 데이터에는 영향을 주지 않도록 하는 방식이다. 예를 들어 다음과 같은 어떤 int값을 파라미터로 넘기는 process 함수가 있다라고 가정하자. #include using namespace std; void process(int value) { cout 2023. 8. 24.
[Java] Stream의 map() VS flatMap() 먼저 결과를 말하자면, map(T -> R)은 T 데이터 형을 R의 데이터형으로 1:1 변환 flatMap(T -> R)은 T 데이터형에서 Stream으로 1:N 변환 Stream의 map() List nameList = Arrays.asList("Tanaka", "Suzuki", "Takahashi"); Stream stream = nameList.stream().map(x -> x.length()); System.out.println(stream.collect(Collectors.toList())); 실행 결과는 다음과 같다. [6, 6, 9] Tanaka Suzuki Takahashi ↓ ↓ ↓ 6 6 9 위와 같이 문자열에서 문자열 길이로 1:1변환하고 있다. Stream의 flatMap() Li.. 2023. 8. 24.