이번 글은 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..
일급 컬렉션 First-Class Collection일급 컬렉션은 컬렉션을 하나의 클래스로 감싸고 컬렉션 자체를 하나의 객체로 다루는 것을 의미한다. 즉 클래스에 컬렉션만 필드로 하나를 가지는 것! 일급(First-Class)이라는 용어는1.컬렉션을 단일 객체로 취급하고,2.컬렉션을 사용한 비즈니스 로직 관리와 데이터 무결성을 지키려는 의도를 가지고 있다. 일급 컬렉션을 사용하는 이유1. 책임 분리컬렉션과 관련된 로직을 일급 컬렉션 내부로 캡슐화해서 데이터 관련된 로직을 한곳에서 관리할 수 있다.컬렉션과 관련된 로직을 일급 컬렉션에 위임할 수 있게 된다. 학생 데이터를 가지는 Student 클래스가 있다고 가정하자.이 때, 전체 학생을 관리하기 위해서 학생 리스트 컬렉션을 만들 수 있다. 그렇다면 전체 ..
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'password'' at line 1 mysql 8 버전 미만에서는 유저 생성, 권한 설정이 한번에 되지만 8 버전 이상에서는 불가능하다. 8 버전 미만 GRANT ALL PRIVILEGES ON team_dev.* TO user_dev@localhost IDENTIFIED BY 'password'; flush privileges; 8 버전 이상 create user user_dev@'%' identifi..
IoC (Inversion of Control) IoC는 "제어의 역전"이라는 의미로, 애플리케이션의 흐름 제어를 개발자가 아닌 프레임워크나 컨테이너가 담당하게 되는 디자인 원칙이다. 전통적인 프로그래밍에서는 개발자가 직접 객체를 생성하고, 해당 객체의 생명 주기를 관리했지만, IoC를 적용하면, 제어와 관리의 책임이 프레임워크나 컨테이너로 이동하게 됩니다. Spring에서는 IoC 컨테이너가 객체의 생명 주기 및 의존성 관리한다. 이처럼 IoC 는 클래스 내부가 아니라, 클래스 외부에서 제어권을 갖도록 하는 것을 말한다. 클래스 내부에서 객체를 생성하기 때문에 변경이 자유롭지 못하던 객체가, IoC 를 적용함으로써 외부에서 인자를 받아 변경이 자유로워졌음을 알 수 있다. 객체지향적 관점에서 보자면, I..
- Total
- Today
- Yesterday
- Git
- 추상클래스
- jvm warm-up 전략
- QueryDSL
- Java
- Linux
- junit5
- Kotlin
- document insert
- java.lang.NullPointerException: Parameter specified as non-null is null
- n+1
- 문자열계산기
- Spring Security
- 스프링오류
- Cannot construct instance of
- JPA
- port
- FetchJoin
- 배열
- checkout
- 오블완
- spring boot 3
- ChatGPT
- dto 클래스 생성자
- 티스토리챌린지
- MultipleBagFetchException
- array
- insertMany
- 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 |