스레드 : 프로세스 내에서 실행되는 소스 코드의 실행 흐름
싱글 스레드 프로세스, 멀티 스레드 프로세스(동시 작업 가능)
프로세스 : 실행 중인 어플리케이션. 데이터, 컴퓨터 자원, 스레드로 구성
스레드는 데이터와 어플리케이션이 확보한 자원을 활용하여 소스 코드를 실행
스레드의 생성과 실행 두 가지 방법
Runnable 인터페이스를 구현한 객체에서 run()을 구현하여 스레드를 생성하고 실행
Thread클래스를 상속받은 하위 클래스에서 run()을 구현하여 스레드를 생성하고 실행
[JVM]
Java Virtural Machine 자바로 작성한 소스 코드를 실행하는 별도의 프로그램
각 운영체제에 맞는 버전 존재.
참고 사이트
https://deepu.tech/memory-management-in-jvm/
🚀 Visualizing memory management in JVM(Java, Kotlin, Scala, Groovy, Clojure)
Let us take a look at how the JVM manages memory.
deepu.tech
JVM 안에서 스택 영역 : LIFO. 메서드 동작 완료되면 역순으로 제거됨
Heap 영역 : 객체나 인스턴스 변수, 배열이 저장
Person person = new Person();
// Heap영역에 인스턴스 생성, 인스턴스 주소값은 person에 할당.
[Garbage Collection]
메모리 자동으로 관리하는 프로세스
Person person = new Person(); // person은 Person 클래스의 인스턴스 주소값 할당받음
person.setName("김코딩"); // "김코딩" 문자열이 인스턴스의 name에 할당
person = null; // 가비지 발생. 인스턴스와 참조변수의 연결 끊어짐
person = new Person();
person.setName("박해커");
Young 영역, Old 영역 존재
Young 영역 : Minor GC. 새롭게 생성된 객체가 할당되는 곳
Old 영역 : Major GC. Young 영역에서 살아남은 객체들이 복사되는 곳.