가비지 컬렉션과 Minor/Major GC 동작 과정
·
Backend/Java
가비지 컬렉션은 더 이상 사용되지 않는 메모리를 자동으로 찾아내어 해제하는 메모리 관리 메커니즘이다. Java 개발에서 가장 중요한 특징 중 하나로, 개발자가 메모리 관리에 대한 부담을 덜 수 있게 해준다. 가비지(Garbage)란?프로그램을 개발하고 실행하는 과정에서는 더 이상 사용되지 않는 메모리인 '가비지(Garbage)'가 발생한다. 이는 다음과 같은 경우에 발생할 수 있다.// 1. 객체의 참조가 null이 되는 경우String text = "Hello";text = null; // 이전의 "Hello" 객체는 가비지가 됨// 2. 객체의 참조 범위를 벗어나는 경우public void createObject() { String localVar = "Hello"; // 메서드 종료 시 접..
volatile 이란?
·
Backend/Java
Volatile'Java 변수를 main memory에 저장하겠다' 라는 것을 명시하는 것매번 변수의 값을 read할 때 마다 cpu cache에 저장된 값이 아닌 메인 메모리에서 읽는 것변수의 값을 write할 때 마다 main memory에 까지 작성하는 것volatile 변수를 사용하고 있지 않는 멀티스레드 어플리케이션에서는 task를 수행하는 동안 성능 향상을 위해 메인 메모리에서 읽은 변수 값을 cpu cache에 저장하게 된다.  ExamplesharedObject를 공유하는 두 개의 스레드가 있다.스레드 1은 카운터 값을 더하고 읽는 연산을 한다. (read & write)스레드 2는 카운터 값을 읽기만 한다. (only read)public class SharedObject { public..
폴링과 인터럽트
·
Computer Science/Operating System
폴링특정 주기마다 스레드를 돌면서 시그널이 들어왔는지 확인하는 방식이다. (소프트웨어적으로 시그널을 확인하는 것) 이렇게 특정 주기마다 계속 확인해야 하기 때문에 시스템의 리소스를 많이 먹는다는 단점이 있다. 인터럽트프로그램 실행 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것 (하드웨어적으로 시그널을 확인하는 것) 시그널이 들어온 정확한 타이밍을 알 수 있고, 반응 시간이 빠르며 시스템 부하가 적다.  인터럽트 처리 과정프로그램 실행 -> 인터럽트 요청 -> 프로그램 중단(수행중인 명령을 완료하고 PC, SR 저장) -> ISR 처리(인터럽트 벡터를 통하여 주소 접근) -> 프로그램 재시작(PC를 통해 접근) ..
시스템 콜
·
Computer Science/Operating System
시스템 콜이 무엇인가?시스템 콜은 응용 프로그램이 직접적으로접근하지 못하는 하드웨어 자원에 접근하기 위해 사용되는 인터페이스이다. 즉, 시스템 콜을 호출함으로서 해당 자원에 간접적으로 접근하게 된다.    우리가 사용하는 시스템 콜 예시와 동작 과정python의 import sys, time도 시스템 콜이고, 대표적으로 file I/O의 open, read, write 등이 있다. 한 파일에서 다른 파일로 데이터를 복사하는 프로그램을 예로 들어서 시스템 콜이 동작하는 과정을 살펴 본다.  시스템 콜 예시1. 아래 명령어와 같이, 복사할 input 파일과 output 파일의 이름을 작성한다.$ cp input.txt output.txt 2. 프로그램은 input 파일을 open(system call)하고,..