JAVA

    [Java] 쓰레드 완벽 정리

    [Java] 쓰레드 완벽 정리

    🔍 프로세스와 쓰레드 프로세스란 '실행중인 프로그램'을 말한다. 우리가 프로그램을 실행시키면 OS(윈도우, Mac 등)는 프로그램 실행에 필요한 데이터와 메모리 등의 자원을 할당한다. 프로세스는 이렇게 할당 받은 자원과 쓰레드로 구성되어 있다. 쓰레드는 '프로세스가 할당 받은 자원을 활용하여 실제 작업을 이행하는 존재' 를 말한다. 쓰레드의 생성에는 제한이 없지만, 작업을 수행하기 위한 메모리 공간을 필요로 한다. 쓰레드는 프로세스가 가지고 있는 자원을 할당받기 때문에 프로세스의 메모리 한계치까지만 생성할 수 있다. 🔍 멀티 태스킹과 멀티 쓰레딩 우리는 문서 작업을 하면서 동시에 유튜브 음악을 감상할 수 있다. 이는 윈도우와 같은 운영체제는 멀티태스킹을 제공하기 때문에 가능한 일이다. 멀티 태스킹은 두 ..

    [Java] Thread vs Runnable

    Thread와 Runnable 인터페이스 자바에서는 Thread와 Runnable을 이용하여 쓰레드를 컨트롤할 수 있다. Thread는 새로운 Thread를 생성하는 클래스이며, Runnable은 Thread나 Executor 등과 같은 실행자에 의해 실행될 수 있는 인터페이스이다. Runnable이 선호되는 이유 Thread 클래스가 java.lang.Thread 클래스만 다루기 때문에 더 쉬워보이지만 Runnable이 더 많이 사용되고 있다. 이유는 다음과 같다. 자바는 다중 상속을 지원하지 않는다. 따라서 Thread를 사용한다는 것은 다른 클래스를 상속할 수 없음을 의미하기도 한다. Runnable 인터페이스는 Thread 또는 Executors 등에 의해 실행될 수 있기 때문에 Runnable을..

    [Java] 인터페이스

    [Java] 인터페이스

    [인터페이스] 인터페이스는 자바에서 추상화를 제공하며, 다중 상속을 하기 위한 유일한 수단이다. [인터페이스의 특징] 인터페이스 타입의 참조는 그 인터페이스를 구현한 모든 클래스를 가리킬 수 있다. public interface Car {} public class MyCar implements Car {} public class DogCar implements Car {} Car mCar = new MyCar(); Car DogCar = new DogCar(); 인터페이스 내에서 선언된 모든 변수는 암묵적으로 public final 변수 또는 상수이다. 인터페이스를 상수를 선언하는 데 유용하게 사용할 수 있다. 전역 상수를 저장하기 위해 인터페이스를 이용하면, 구현 클래스에서는 클래스 이름을 참조하지 않..

    [Java] 자바의 가비지 컬렉션

    [Java] 자바의 가비지 컬렉션

    🔍 가비지 컬렉터의 역할 자바의 가비지 컬렉터는 공통적으로 두 가지 작업을 수행한다. 힙(Heap)내의 객체 중에서 가비지(Garbage)를 찾아낸다. 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다. 🔍 Reachability GC는 객체가 가비지인지 판별하기 위해 reachability라는 개념을 사용한다. 만약 객체가 사용중(유효한 참조)이라면 reachable, 사용중이지 않으면 unreachable로 구별한다. 참조된 객체는 다른 객체를 참조할 수 있고 객체는 서로 다른 객체를 참조할 수 있도록 되어 있기에 참조 사슬을 이룬다. 이때, 유효한 참조 여부를 판단하기 위해 최초의 참조를 찾는다. 이를 root set이라고 한다. 힙에 있는 객체들에 대한 참조는 4가지 중 하나이다. 힙 내의 다른 객..

    [Java] JVM이란?

    [Java] JVM이란?

    OS마다 같은 이진수를 입력해도 서로 이해하는 것이 다르다. 따라서 OS마다 기계어 코드로 변환할 때 CPU와 운영체제에 종속적인 코드로 변환을 해야 한다. 그런데 Java는 OS에 종속적이지 않다. 이것이 어떻게 가능한 것일까? 🔍 JVM이란? Java Virtual Machine으로 자바를 실행할 수 있도록 도와주는 가상 기계로 OS에 종속되지 않고 실행할 수 있도록 도와준다. 보통 프로그램을 실행하면 CPU와 운영체제에 맞춰 기계어로 컴파일하는 과정을 거친다(아래 왼쪽). 하지만 자바는 JVM이라는 가상 머신에서 JVM이 인식할 수 있는 바이트코드(.class파일)로 변환된다. 그러면 JVM이 바이트코드를 OS가 이해할 수 있도록 해석해준다. 🔍 자바 컴파일러 자바의 컴파일러는 .java 파일을 ...