이번 글은 4번 자바 어플리케이션 실행 과정에 대해서 작성한다.1. JVM 구성 요소와 JVM Warm-up 전략2. JVM 메모리 구조3. JVM 가비지 컬렉션4. 자바 어플리케이션 실행 과정5. Java 비동기 처리 (프로세스, 쓰레드, 비동기 처리) 자바 어플리케이션의 실행 과정을 통해 내부에서 JVM이 어떻게 사용되는지 확인할 수 있다. 1. 자바 어플리케이션의 실행 과정의 실행 과정 요약1. 소스코드 → 바이트코드 변환자바 컴파일러(javac)는 소스코드를 플랫폼 독립적인 바이트코드로 변환한다.바이트코드는 JVM이 이해할 수 있는 형태로, 다양한 운영 체제에서 동일하게 실행된다.2. JVM 실행: 클래스 로더가 클래스 파일을 메모리에 동적으로 로드JVM을 시작하고, JVM은 실행에 필요한 클래..
이번 글은 3번 JVM 가비지 컬렉션에 대해서 작성한다.1. JVM 구성 요소와 JVM Warm-up 전략2. JVM 메모리 구조3. JVM 가비지 컬렉션4. 자바 어플리케이션 실행 과정5. Java 비동기 처리 (프로세스, 쓰레드, 비동기 처리) Java는 Garbage Collection(GC)을 사용해서 개발자가 메모리 할당과 해제를 수동으로 처리하지 않아도 된다.가비지 컬렉션을 통해 JVM이 사용하지 않는 객체를 자동으로 찾아서 메모리를 해제해주기 때문이다.메모리 관리는 성능에 직접적인 영향을 끼치기 때문에 올바른 메모리 관리와 GC에 대한 이해가 필요하다. 1. 가비지 컬렉션 Java 메모리의 각 영역에서 더 이상 사용되지 않는 객체가 존재하면,JVM이 사용하지 않는(참조가 존재하지 않는) 객..
이번 글은 2번 JVM 메모리 구조에 대해서 작성한다.1. JVM 구성 요소와 JVM Warm-up 전략2. JVM 메모리 구조3. JVM 가비지 컬렉션4. 자바 어플리케이션 실행 과정5. Java 비동기 처리 (프로세스, 쓰레드, 비동기 처리) 자바 어플리케이션 메모리 구조 1. Method Area: 클래스 메타데이터와 상수 풀JVM이 실행되면서 생기는 공간이다.저장하는 정보클래스 메타데이터: 클래스 이름, 접근 제어자, 부모 클래스 정보), 전역변수 정보static 변수: 클래스에 선언된 정적 변수Runtime Constant Pool 에는 말 그대로 상수가 저장된다.리터럴 상수 (Literal Constants)String s1 = "HelloWorld"; // "HelloWorld" Const..
Java 실행 과정을 살펴보려면, 자바 가상 머신 JVM에 대한 이해가 필요하다.JVM은 자바 어플리케이션의 실행을 가능하게 하는 핵심 기술으로, 성능 최적화에 대해 고민한다면 빠질 수 없는 내용이기 때문이다.이번 글은 1. JVM 구성 요소와 Warm-up 전략에 대해서 작성한다.1. JVM 구성 요소와 JVM Warm-up 전략2. JVM 메모리 구조3. JVM 가비지 컬렉션4. 자바 어플리케이션 실행 과정5. Java 비동기 처리 (프로세스, 쓰레드, 비동기 처리) 1. JVM 구성 요소JVM은 1. 클래스 로더, 2. 실행 엔진, 3. 런타임 데이터 영역 세 가지 구성 요소로 나뉜다. 1.1. 클래스 로더(Class Loader)클래스 로더는 자바 어플리케이션 실행 시 .class 클래스 파일..
방어적 복사에 대해서 공부하다가 얕은 복사, 깊은 복사, 방어적 복사 함께 비교하면 좋을거 같아서 비교글을 써보기로 했다. 얕은 복사 vs 깊은 복사 vs 방어적 복사얕은 복사: 객체의 참조만 복사한다. 즉, 원본 객체와 복사본 객체가 같은 메모리 주소를 참조하게 된다.깊은 복사: 객체와 내부에 포함된 참조 타입 필드(예: 배열, 필드)까지 모두 복사하여 원본과 독립적인 객체를 생성한다.방어적 복사: 외부에서 전달된 객체를 변경할 수 없도록 원본 객체의 상태를 보호하기 위해 내부에서 새로운 객체를 생성한다. 💡 얕은 복사객체의 참조만 복사한다.객체의 내부 데이터를 복사하지 않고, 그 데이터가 저장된 메모리 주소값(참조)을 복사한다는 걸 의미한다. 얕은 복사로 생성된 객체는 겉보기엔 원본 객체와 별도의 ..
Record 클래스Record는 Java 14에서 처음 도입된 기능으로, Java 16부터 정식으로 사용 가능하다.레코드는 불변 객체를 쉽게 생성할 수 있도록 도와주는 기능을 제공한다. 1. 불변성 보장 함수형 프로그래밍에서 중요하게 여기는 개념으로 불변성(Immutable)이 있다.Java의 레코드 클래스는 한번 생성된 객체의 데이터를 변경할 수 없기 때문에 불변성을 가지고 있다. 따라서 데이터를 일관성 있게 유지할 수 있기 때문에 데이터 전송 객체(DTO)로 자주 사용된다. 2. 보일러플레이트 코드 제거생성자, getter, setter, equals, hashCode, toString 메서드를 자동으로 생성해주기 때문에DTO에서 주로 사용하는 보일러플레이트 코드(반복되는 코드)를 줄일 수 있다. ..
Static 메서드란?Static 메서드는 객체 생성 없이 클래스 레벨에서 직접 호출할 수 있는 메서드다.Java에서 static 키워드를 붙이면 해당 메서드는 객체가 아닌 클래스 자체에 속하는 메서드가 된다.특정 인스턴스와 관계 없이 클래스 이름만으로 직접 호출할 수 있게 된다. 예시: StringUtils 클래스의 static 메서드public final class StringUtils { public static boolean isBlank(String str) { return str == null || str.trim().isEmpty(); }}// 호출 예시boolean result = StringUtils.isBlank(""); // 객체 생성 없이 호출 가능하다!isB..
추상 클래스와 항상 따라다니는 인터페이스!! 이어서 인터페이스에 대해서 살펴보도록 하겠습니다~! 1. 자바에서 인터페이스가 생겨난 배경 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하는데 클래스와 다르게 여러개의 인터페이스로부터 다중상속(구현)이 가능하다. 💡 다중상속이 먼가요? 다중 상속을 지원하게 되면 하나의 클래스가 여러 부모 클래스로부터 상속 받을 수 있다. BUT ! 자바는 IS-A 관계(상속관계)로 하나만 상속이 가능하다. 자식 클래스가 여러 부모 클래스를 상속받는다면 다양한 부모 클래스의 메서드를 가져올 수 있어서 좋지 않을까? 싶지만 부모의 메서드 중 동일한 메서드가 있다면 자손에서 충돌나는 문제를 방지하기 위해서 자바에서는 다중 상속을 지원하지 않는다. 이..
- Total
- Today
- Yesterday
- n+1
- JPA
- dto 클래스 생성자
- jvm warm-up 전략
- redisson 분산락
- bucket4j
- FetchJoin
- 티스토리챌린지
- 스프링 스케줄링
- Git
- Spring Security
- QueryDSL
- checkout
- 자바 어플리케이션 실행 과정
- port
- MultipleBagFetchException
- Java
- Linux
- junit5
- spring boot 3
- array
- 오블완
- ChatGPT
- Cannot construct instance of
- Kotlin
- 배열
- 추상클래스
- addFilterBefore
- MongoDB
- 스프링오류
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |