전체 글 208

Logger

현재 어떤 스레드가 코드를 실행하는지 출력하기 위해 다음과 같이 긴 코드를 작성하는 것은 너무 번거롭다. 현재 시간, 스레드 이름, 출력 내용등이 한번에 나오는 것을 알 수 있는 기능을 만드는 것이 좋다.import java.time.LocalTime;import java.time.format.DateTimeFormatter;public class MyLogger { private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS"); public static void log(Object obj) { String time = LocalTime.now().format(formatte..

Java 정리 2024.11.22

스레드 생성

자바 메모리 구조 메서드 영역(Method Area)  : 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다. 모든 실행코드. static, 공통 상수들. 스택 영역(Stack Area)  : 자바 실행 시, 하나의 실행 스택이 생성된다. 각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다 힙 영역(Heap Area) : 객체(인스턴스)와 배열이 생성되는 영역이다. 가비지 컬렉션(GC)이 이루어지는 주요 영역이며, 더 이상 참조되지 않는 객체는 GC에 의해 제거된다. 스택 영역은 더 정확히는 각 스레드별로 하나의 실행 스택이 생성된다. 따라서 스레드 수만큼 스택이 생성된다. 지금은 스레드를 1개만 사용하므로 스택도..

운영체제 2024.11.22

백준 1300 - Java

import java.util.Scanner;public class BJ1300 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K = sc.nextInt(); long low = 1; long high = K; //이분 탐색 시작 while(low  N X N 이라는 행렬 A가 B로 나열 될 때를 푸는 문제이다.A[i][j]는 i×j이므로, midmidmid 이하의 숫자를 세는 로직은 다음과 같음:각 행 i에서 mid 이하의 숫자는 mid/i 개.단, 한 행의 숫자 수는 ..

백준 2024.11.19

컨텍스트 스위칭

컴퓨터의 멀티태스킹운영체제의 멀티태스킹을 생각해 보자. CPU 코어는 하나만 있다고 가정하자. 스레드 A, 스레드 B가 있다. 운영체제는 먼저 스레드 A를 실행한다. 멀티태스킹을 해야 하기 때문에 스레드 A를 계속 실행할 수 없다. 스레드 A를 잠 시 멈추고, 스레드 B를 실행한다. 이후에 스레드 A로 그냥 돌아갈 수 없다. CPU에서 스레드를 실행하는데, 스레드 A의 코드가 어디까지 수행되었는지 위치를 찾아야 한다. 그리고 계산하던 변수들의 값을 CPU에 다시 불러들여야 한다. 따라서 스레드 A를 멈추는 시점에 CPU에서 사용하던 이런 값들을 메모리에 저장해두어야 한다. 그리고 이후에 스레드 A  를 다시 실행할 때 이 값들을 CPU에 다시 불러와야 한다. 이러한 과정을 콘텍스트 스위칭이라고 한다.컨텍..

운영체제 2024.11.17