Development/Java
-
[Java] volatile keywordDevelopment/Java 2021. 3. 7. 18:22
Java에서 volatile 키워드는 자바 변수가 컴퓨터 CPU Cache가 아닌, 메인 메모리에서 읽어올 수 있도록 합니다. 즉, volatile 키워드가 붙은 변수는 오직 메인 메모리에서만 데이터를 읽고 쓰게 되는 것입니다. 이제부터 멀티쓰레드 환경에서 volatile 키워드가 가지는 의미에 대해서 알아보겠습니다. 변수 가시성 문제 멀티쓰레드 어플리케이션에서 각 쓰레드들이 non-volatile 변수들이 데이터에 접근할 때는 성능상의 이유로 메인 메모리로부터 읽고, CPU Cache에 복사해둡니다. 만약 컴퓨팅 환경이 두 개 이상의 CPU가 돌아간다면 아래의 이미지처럼 각자의 CPU에서 이러한 동작이 일어나게 될 것입니다. non-volatile 변수들은 언제 JVM이 메인 메모리에서 CPU Cach..
-
[Java] Garbage Collector 이해하기Development/Java 2020. 10. 4. 17:27
Garbage Collector 가비지 컬렉터는 애플리케이션의 할당된 동적 메모리를 자동으로 관리합니다. gc는 다음의 동작들을 통해 동적 메모리 관리를 자동으로 수행합니다. 메모리를 운영체제에 할당하고 반환 요청 시에 메모리를 애플리케이션에 전달 메모리가 애플리케이션에 의해 여전히 사용되고 있는지 결정 재사용을 위해 사용되지 않는 메모리를 애플리케이션으로부터 회수 가비지 컬렉터는 다음의 두 가지 가설을 관점으로 설계되었습니다. 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다. 이러한 가정을 약한 세대 가설(weak generational hypothesis)이라 합니다. 이를 바탕으로 매번 메모리 전체를 검사하지 않고 일부..
-
[Java] ThreadLocal이란?Development/Java 2020. 9. 27. 16:05
ThreadLocal ThreadLocal은 한 쓰레드에서 읽고 쓰여질 수 있는 변수를 할당하여 접근할 수 있도록 합니다. 멀티 쓰레드 환경에서 각 쓰레드마다 get(), set() 메서드를 통해 독립적으로 변수에 접근할 수 있습니다. 말그대로 Thread 내부에서 사용하는 지역변수입니다. ThreadLocal를 다루는 방법 public class ThreadLocalExam { public static ThreadLocal myThreadLocal = new ThreadLocal(); public static void main(String[] args) { myThreadLocal.set("Hello World!"); String myThreadLocalValue = myThreadLocal.get()..
-
[Java] JVM의 구조Development/Java 2020. 7. 28. 23:46
JVM(Java Virtual Machine)은 자바 어플리케이션을 실행시키기 위한 가상 머신입니다. Java는 WORA(Write Once Run Anywhere)이라는 목표로 개발된 언어입니다. 이러한 목표로 한 번 작성한 프로그램을 실행 환경에 구애받지 않고 어디서든 실행시킬 수 있도록 하기 위해 JVM이라는 가상 머신이 존재하는 것입니다. 자바가 실행되는 과정 사용자가 작성한 소스 코드는 .java 라는 확장자를 가진 파일입니다. .java 파일은 Compiler에 의해 .class 확장자를 가진 byte-code가 생성됩니다. byte-code는 JVM에 의해 로드되어 실행됩니다. 아래는 JVM 구조에 대한 그림입니다. JVM은 위의 그림에서 보이는 것처럼 크게 3개의 서브시스템으로 나누어져 있..