💭 오늘의 학습 전략
# 스트림
◼ 문제풀이
# 스레드(Thread)
◼ 싱글 스레드(Single thread)
◼ 멀티 스레드(Multi thread)
◻ 생성, 실행
◻ 스레드 동기화
◻ 상태 제어
# 자바 가상 머신(JVM)
◼ JVM 메모리 구조
◼ 가비지 컬렉션(Garbage collection)
🌼 학습한 것들
◼ 멀티 스레딩을 위한 스레드 생성, 실행
- 1-1. Runnable 인터페이스를 구현한 클래스에 작업 작성 (run())
> 구현 객체를 인자로 전달하면서 Thread 객체 생성
- 1-2. Thread를 상속받은 하위 클래스에 작업 작성
> 구현 클래스를 인스턴스화
+) 클래스를 생성하지 않아도 익명 객체를 사용하여 생성 가능
- 2. 작업 스레드 실행(start())
- * 엄밀히 말해 start()는 스레드를 실행시켜주는 것이 아닌, 프로세스 스케줄러가 알맞게 할당할 수 있도록 state를 실행 대기상태로 바꾸어 두는 것.
◼ 스레드 이름 설정 가능
- 스레드 참조변수.setName() / Thread.currentThread.setName()
◼ 스레드 동기화
- 여러 스레드가 동일한 데이터를 공유하면서 생기는 문제 해결
- 임계영역을 지정하여 스레드에게 락을 획득/반납할 수 있도록 해야함.
- 1. 메서드 전체를 임계영역으로: 메서드 시그니처의 반환타입 앞에 "synchronized" 키워드 삽입
- 2. 특정 영역을 임계영역으로: synchronized(대상 객체 this) { 동기화 블럭 지정 }
◼ 자바 실행 엔진이 Runtime Data Area에 적재된 바이트 코드 실행하는 방법
- 인터프리터: 한 줄씩 번역 및 실행
- JIT Compiler: 코드 전체를 번역 및 실행
- 기본적으로 인터프리터 방식이나 특정 코드가 자주 실행되면 JIT 컴파일러 통해 실행
◼ Method Frame
- 메서드 호출 시, 여러 변수 및 연산 결과 등을 저장하는 공간. stack 영역에 적재
◼ 객체를 다룬다
- stack 영역에 저장된 참조변수를 통해, heap 영역에 존재하는 객체를 다룬다.
◼ Garbage Collection (GC)
- 기존 인스턴스와 연결이 끊어졌을 때, (null 할당 등으로) 이전 객체는 아무도 참조하지 않게 됨
-> 메모리 점유 해제
◼ heap 영역
- Young: 새롭게 생성된 객체 할당. Minor GC 활동 영역
- Old: 상태를 유지하고 살아남은 객체 복사됨 Major GC 활동 영역
◼ 기본적인 GC 방식
- 1. Stop the world: GC 스레드 제외 모든 스레드 작업 중단 (정리 완료 후 재개)
- 2. Mark and Sweep: 사용/미사용 메모리 식별(Mark), 미사용 메모리 제거(Sweep)
🔥 보충이 필요한 것들
◼ Stream 매핑
◼ 익명 객체를 통한 스레드 생성
◼ 스레드 상태, 실행 제어
💨 하루를 마치며
1. 갈수록 공부 내용이 많아지는 중이라서 재미있기도 하고 좌절하기도 하는 중이다.
2. 오늘은 어제보다 많이 학습하는 게 수월했다. 코플릿도 문제없이 마쳤다.
3. 더 많이 써보고, 더 많이 만들어보는 게 중요하다. 당장 생각한 대로 손이 안 가는 것은 그럴 수 있지만 그림마저 그려지지 않고 뭐부터 손대야할 지 모르는 지경이 되지 않도록 많이많이 연습하는 데에 집중해서 계획을 세워야겠다.
'공부기록 > TIL' 카테고리의 다른 글
2022/11/17 TIL | 재귀 (0) | 2022.11.17 |
---|---|
2022/11/16 TIL | 모의 기술면접(1) (0) | 2022.11.16 |
2022/11/14 TIL | Java 심화(람다, 스트림) (0) | 2022.11.14 |
2022/11/11 TIL | Java 컬렉션 연습 (0) | 2022.11.11 |
2022/11/04 TIL | Java OOP 기초(생성자, 내부 클래스) (0) | 2022.11.04 |
댓글