본문 바로가기
패스트캠퍼스 국비지원 주간 학습 블로그

5주차 부트캠프 회고

by LeeInGyu 2025. 7. 20.

수업 내용 정리

자바는 GC(가비지 콜랙터) 개선이 힘들다.

sychronized 동기화 lock(락)을 사용해서 다중의 스레드동시 접근제한한다.

wait() : 객체의 lock을 풀고, 쓰레드를 해당 객체의 waiting pool 에 넣는다.

notify() : waiting pool대기중인 쓰레드 중 하나깨운다.

notifyAll() : waiting pool 에서 대기중인 모든 쓰레드깨운다.

비동기처리보다 쓰레딩이 더 간단하고 빠르다.

락의 종류 3가지

  • 베타락 Mutex lock : 메소드의 중복 허용 X
  • 공유락 Semaphore lock : 메소드의 중복 허용 O
  • 낙관적인 잠금 Optimistic lock : 일단 잠금 후 나중에 확인

캐시 메모리의 캐시 종류 3가지

  • L1 캐시: 크기가 가장 작고, 가장 빠르다.
  • L2 캐시: 크기가 L1보다 크고, L1보다 조금 느리다.
  • L3 캐시: 크기가 가장 크다, 속도도 느리지만 캐시에서 공유 메모리로 쓰인다.

volatile

  • 캐시가 아닌 메모리에서 값을 불러오도록 하는 제어자(키워드)
  • 자주 바뀌는 값일 경우 자주 쓰인다.
  • volatile {타입} {변수명};

fork & join

  • 하나의 작업작은 단위로 나눠서 여러 쓰레드동시에 처리하는 것
  • Recursive ActionRecursive Task 중 하나를 상속받아서 구현한다.
  • 작업을 어떻게 나눌 것 인지도 명시해야 한다.

가상 쓰레드(Virtual Thread)

  • 기존의 쓰레드경량 버전이다.
  • 기존 쓰레드 객체를 최대한 유지해서 활용한다.
  • 가상 쓰레드는 항상 데몬 쓰레드로만 가능하다.
  • 가상 쓰레드우선순위(5로 고정)가 고정되어 바뀌지 않는다.
    • 바뀌기 시도해도 바뀌지 않는다.
  • OS 쓰레드플랫폼 쓰레드1대1 로 연결되며, system call을 사용해 연결해서 오버헤드가 크다.
    • 반면에 가상 쓰레드플랫폼 쓰레드와 연결되어서, 오버헤드가 적다.
  • 가상 쓰레드4,000만 개를 구현할 수 있으며, 오버헤드10배 정도 적다.
    • context switching(문맥 교환) 시간이 적다.
      • OS 쓰레드문맥교환보다 JVM 쓰레드문맥교환빠르기 때문이다.
  • Thread.ofVirtual() - 가상 쓰레드 생성
  • 가상 쓰레드는 main 이 종료되면 자동종료되기 때문에 이것을 막기 위해 join() 를 활용해서 자동종료를 방지한다.

플랫폼 쓰레드(Platform Thread)

  • 가상 쓰레드아닌 기존의 쓰레드
  • Thread.ofPlatform() - 플랫폼 쓰레드 생성

람다식 (Lambda)

  • 한 줄짜리 함수
  • 예시
    • (int x, int y) → a > b ? a : b
    • (String name, int i) → System.out.println(name + “=” + i)
    • (int x) → x * x
    • () → (int)(Math.random() * 6)

Stream 객체

  • 입출력보조하는 것
  • InputStream
  • OutputStream
  • 바이트 기반 스트림(기준 1byte): 바이트 단위로 읽어서 처리하는 것
    • 데이터 기반 스트림(기준 int, float): 기본형 단위로 처리하는 것

미니피(Minify)

  • 공백이나 주석모두 지운 버전파일

더블 버퍼링(Double Buffering)

  • 버퍼2개 두어서 완벽하게 불러오기까지 대기했다가 화면에 한번에 뿌려준다.
  • 이때 웹사이트가 깜빡거리는 현상없어지는 효과가 있다.

이번주를 마치며...

이번주도 하루에 약 10종류의 공부를 하면서, 공부하는 것이 지루하지 않게 하려고 노력했던 것 같다. 하지만 금요일 마지막에 집중을 조금 못한 것은 아쉽지만, 다음주는 좀 더 잘해보자고~