Java 72

[JVM 밑바닥까지 파헤치기] 3-1. 가비지 컬렉터와 메모리 할당 전략: 회수

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다.1. 참조힙에 있는 객체의 메모리 주소를 가리키는 값✅ GC는 참조 그래프를 따라 GC Root로부터 도달 가능한지를 기준으로 객체의 생존 여부를 결정함 타입참조 타입정의 및 설명GC 수집 시점주요 용도Strong Reference일반적인 객체 참조❌일반 객체 참조Soft Reference메모리 부족 시에만 수집되는 참조⚠️ 메모리 부족 시캐시Weak Reference강한 참조가 사라지면, 다음 GC에 바로 수거 대상이 되는 참조✅메모리 누수 방지Phantom Reference객체가 완전히 GC 대상이 된 후 감지하기 위한 참조✅객체 이벤트 감지 예시) Soft Reference더보기SoftReference softRef = new ..

Java/JVM 2024.12.19

[JVM 밑바닥까지 파헤치기] 2. 자바 메모리 영역과 메모리 오버플로

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 런타임 데이터 영역 JVM이 프로그램을 실행하는 동안 데이터를 저장하고 관리하기 위해 사용하는 메모리 구조 영역영역 이름설명주요 특징 및 구성 요소메서드 영역클래스 메타데이터 영역 힙 영역객체 인스턴스가 저장되는 영역- GC 관리 대상JVM 스택메서드 호출 시마다 생성되는 스레드 기반 스택- 스택 프레임 단위 구성프로그램 카운터 (PC)현재 스레드가 실행 중인 바이트코드의 줄 번호를 저장- 스레드마다 별도 존재- 네이티브 메서드 실행 시 비어 있음네이티브 메서드 스택C 등의 네이티브 메서드 실행용 스택- JNI 등 호출 시 사용 표) 메서드 영역더보기구분저장 내용설명클래스 메타데이터클래스 이름클래스의 식별 정보 부모 클래스 정보..

Java/JVM 2024.12.19

[JVM 밑바닥까지 파헤치기] 1. 자바 기술 시스템 소개

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 자바 가상 머신 제품군제품명시기/기반주요 기능 및 특징단점 및 한계점Sun Classic VMJDK 1.0~1.2- 순수 인터프리터 방식 실행- 실행 효율이 낮음 (JIT 없음)Exact VM초기 JVM- 객체 포인터 정확히 추적- 실험적 성격HotSpot VMOpenJDK 기본 JVM- 핫 코드 탐지- JIT 컴파일- 온스택 치환- 메모리 사용량 증가- 초기 워밍업 시간 필요GraalVMPloyglot VM- 다중 언어 지원 (Java, Kotlin, JS, Python 등)- 중간언어 변환 방식- 빠른 실행 (Native Image 생성 가능)- 일부 기능 실험적- 일부 언어는 제한적 지원 가능 2. 자바 기술의 미래차세대 ..

Java/JVM 2024.12.19

[Java][Tutorial] 1-3. Learning the Java Language: Classes and Objects

The Java Tutorials have been written for JDK 8 3. Classes and ObjectsConstant값을 수정할 수 없는 필드입니다.final 키워드로 표기합니다. Access Control외부 클래스로부터 접근 제한 레벨을 지정하는 키워드입니다. Inner Classes클래스 내부에 선언된 클래스 입니다. 접근 제한 Static class : 밖에 있는 필드에 접근할 수 없습니다.Non-Static class : 밖에 있는 필드에 접근할 수 있습니다. Nested Classes내부 클래스를 가지고 있는 클래스 사용하는 이유오직 클래스 안에서만 사용되도록 논리적으로 묶는 유용한 방법입니다.캡슐화 효과를 얻을 수 있습니다. 직렬화중첩 클래스의 직렬화는 비권장됩니다.내..

Java 2024.01.14

[Java][Tutorial] 1-2. Learning the Java Language: Language Basics

The Java Tutorials have been written for JDK 8 1. Variables자료를 저장하기 위한 메모리 공간 입니다.타입에 따른 메모리가 할당됩니다. member variable항목Instance VariableClass Variable (Static Field)정의인스턴스마다 개별로 존재하는 변수클래스당 하나만 존재하는 변수생성 시기객체가 생성될 때클래스가 JVM에 로딩될 때생성 위치각각의 객체별로 Heap 메모리에 생성됨클래스 영역 또는 Heap의 메서드 영역에 생성됨 (클래스별)공유 여부공유되지 않음모든 인스턴스가 같은 변수를 공유함사용 예시개별 사용자 이름, 나이 등전역 설정값, 공통 카운터, 상수 등값 변경각 인스턴스가 자유롭게 변경 가능하나가 바꾸면 모두에게 반영..

Java 2024.01.14

[Java의 정석] 13-3. 스레드: 실행 제어

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 8. 실행 제어 상태NEW스레드가 생성되고 아직 start()되지 않은 상태RUNNABLE실행중 또는 실행 가능한 상태BLOCKED동기화 블럭에 의해 일시정지된 상태WAITING,TIMED_WAITING일시정지 상태(작업이 종료되지 않음) 일시정지 시간이 지정된 경우TERMINATED작업이 종료된 상태  메서드sleep()지정된 시간동안 스레드를 정지시킵니다.지정한 시간이 지나고 나면 자동적으로 다시 실행대기 상태가 됩니다.join()다른 스레드의 작업이 끝날 때까지 대기하도록 만드는 메서드지정한 시간동안 실행되도록 합니다.지정한 시간이 지나거나 작업이 종료되면 join()을 호출한 스레드는 다시 돌아와 실행됩니다suspend()스레드를 일시..

Java 2023.11.30

[Java의 정석] 13-4. 스레드: 동기화

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 9. 동기화한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하게 막는 것입니다.멀티스레드의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하므로 서로의 작업에 영향을 주게 됩니다.한 스레드가 특정 작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것이 필요합니다. 임계영역공유데이터를 사용하는 코드 영역입니다. Lock단 하나의 스레드만 공유데이터를 사용하도록 하는 매커니즘입니다.해당 공유데이터를 사용하는 스레드는 락을 획득합니다.임계영역의 모든 코드를 수행하고 나서 락을 반납하며, 다른 스레드가 반납된 락을 획득하여 임계영역에 접근할 수 있습니다. synchronizedsynchronized 키워드를 붙여 임계영역..

Java 2023.11.30

[Java의 정석] 15-6. 입출력: Serialization

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 7. Serialization객체를 데이터 스트림으로 만드는 것을 뜻합니다.객체를 파일로 저장하거나 네트워크를 통해 서로 주고받을 때 필요합니다. 객체직렬화에서의 객체는 "클래스에 정의된 인스턴스 변수의 집합"을 의미합니다.클래스 변수나 클래스 메서드가 포함되지 않습니다.역직렬화 시에 클래스 관련 정보는 불필요합니다.내용물인 변수 값만 가지고 있으면 인스턴스를 메모리에 올릴수 있습니다. ObjectInputStream & ObjectOutputStream객체를 다루는 보조 스트림 입니다.인스턴스 변수의 직렬화에 사용됩니다.직렬화 시 참조 타입의 객체 변수도 모두 포함됩니다.FileOutputStream fos = new FileOutputStr..

Java 2023.11.29

[Java의 정석] 15-5. 입출력: File

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 6. File파일 또는 디렉토리를 추상적으로 표현하는 클래스파일 또는 디렉토리를 다루는데 사용됩니다. 제어// 파일이름 (경로 포함)File f = new File("c:\\jdk1.8\\work\\ch15\\FileEx1.java"); // 디렉토리 경로, 파일이름 (경로 제외)File f = new File("c:\\jdk1.8\\work\\ch15", "FileEx1.java"); f.getName(); // 파일이름 (경로 제외)f.getPath(); // 경로f.getAbsolutePath(); // 절대경로f.getCanonialPath(); // 정규경로f.getParent(); // 디렉토리 경로File.pathSeparator; ..

Java 2023.11.29

[Java의 정석] 15-4. 입출력: 표준 입출력

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 5. 표준 입출력콘솔을 통한 데이터 입력과 출력을 의미합니다.자바에서는 표준 입출력을 위한 3가지 입출력 스트림을 제공합니다.자바 애플리케이션의 실행과 동시에 자동적으로 생성됩니다. System.in콘솔로부터 데이터를 입력받는데 사용하는 입력 스트림입니다.InputStream System.out콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다.PrintStream System.err콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다.에러 로그 출력 전용으로 사용됩니다.PrintStream

Java 2023.11.29