JVM Warm-up, feat. 스프링 첫 요청이 오래 걸리는 이유
·
💻 Dev/Java & OOP
원인웹 애플리케이션을 실행한 후 초기 요청이 지연되는 현상을 이해하려면, 자바 프로그램이 실행되는 방식을 깊이 살펴볼 필요가 있다.C, C++과 같은 컴파일 언어는 소스 코드를 기계어로 직접 변환하여 최적화된 성능을 제공하나 빌드 환경에 종속적이라는 단점이 있다.즉, 플랫폼이 바뀌면 재컴파일이 필요하다. 자바는 이러한 플랫폼 종속적인 문제를 해결하고자 JVM을 도입하였다.자바는 자바 코드는 컴파일 시 바이트 코드로 변환되고, 실행 시 JVM이 이를 기계어로 변환하여 실행한다.이러한 구조 덕분에 Java는 플랫폼에 종속되지 않게 되었지만, 이 과정에서 변환 작업이 추가되므로 성능에 영향을 미칠 수 있다. 1. 클래스 로더JVM에서 클래스 로더(Class Loader)는 바이트 코드를 메모리에 로드하는 역할..
JDK 8에서 Perm 영역이 삭제된 이유
·
💻 Dev/Java & OOP
JDK 8부터 자바는 기존의 PermGen(Permanent Generation) 영역을 제거하고, Native Memory를 사용하는 Metaspace를 도입했다. PermGen이란?PermGen(이하 Perm) 영역은 JDK 7까지 존재했던 메모리 영역으로, 클래스 메타데이터와 런타임 중에 읽힌 클래스 및 메서드 정보 등을 저장하는 공간이었다. Perm에 저장되는 데이터클래스 메타데이터(클래스 이름, 메서드 이름, 필드 이름 등)런타임 상수(Constant Pool)Static 변수(JDK 8 이전)메서드와 바이트코드 Perm 영역은 힙(Heap) 외부에 위치하며, JVM 실행 시 크기가 고정된다. 하지만 이 고정된 크기는 메모리 부족 문제를 자주 일으켰다. 동적으로 클래스들이 로드되고 Static ..
가비지 컬렉터(GC) feat.힙 영역
·
💻 Dev/Java & OOP
Heap 영역가비지 컬렉터(GC)를 이해하기 전에 먼저 힙 영역에 대한 이해가 필요하다.Heap 영역의 역할자바의 힙 영역은 JVM 메모리 구조에서 가장 중요한 부분 중 하나로, 크게 세 가지 주요 역할을 한다. 1. 객체 저장 공간자바의 객체와 배열(Array)과 같은 참조 타입 변수는 힙영역에 저장된다.힙 영역에 저장된 데이터는 스택(Stack) 영역에 있는 참조 변수(reference value)를 통해 접근할 수 있다. 2. 동적 메모리 할당프로그램 시작 시에 한 번에 전체 메모리가 할당되는 것이 아니라, 객체가 실제로 필요할 때 동적으로 메모리가 할당된다.class Main { public static void main(String[] args) { // 여기서 person은 ..
자바는 Call by Value만 사용한다.
·
💻 Dev/Java & OOP
프로그래밍을 하다 보면 Call by Value / Call by Reference 개념을 배우게 된다.특히 C언어에서 포인터 할 때 고통받았던 기억이... 옛날에 자바 공부할 때는 어디서는 Call by Reference도 사용한다고 봤다..!결론만 보자면 자바는 Call by Value만 사용한다. Call by Value기본 데이터 타입Call by Value란 값에 의한 호출을 의미한다.메서드 호출 시 전달되는 값의 복사본이 메서드로 전달된다는 뜻이다.public class CallByValueExample { public static void main(String[] args) { int original = 5; modify(original); Sys..
String Constant Pool, feat. Runtime Constant Pool
·
💻 Dev/Java & OOP
String str = "hello";String str2 = "hello";System.out.println(str == str2); // true위 코드에서 str == str2의 결과는 뭘까?동등성과 동일성을 배웠다면 false로 예상했겠지만 결과는 true다. "어라 자바에서 객체는 ==이 아니라 .equals()로 비교해야 문자열 비교가 되는 거 아니었나?"그 이유는 JVM이 String Pool을 사용하기 때문이다. String Constant Pool이란?우선 Contant Pool이란 클래스 내에 사용되는 상수들을 담아놓은공간이다.클래스 파일(.class)안에 테이블 형태로 들어가 있다. 이 Constant Pool에서 문자열 리터럴만을 별도로 관리하는 공간이 String Pool(Stri..
BigDecimal이란?
·
💻 Dev/Java & OOP
자바의 신 11장을 학습하다가 대부분 java docs 사용법? 에 대한 내용이라 어떤 걸 정리해야 할지 몰라'직접해 봅시다'파트에 BigDecimal API를 열어보라고 하길래 알아보고자 했다.결제나 큰 숫자 다룰 때 사용한다고 들어서 중요하구나~라고 듣기만 했다. BigDecimal이란?java.math 패키지에 속한 클래스로 정밀한 숫자 연산에 사용된다.주로 금융이나 과학 계산 등에서 부동 소수점 연산의 오차를 방지하고 정확한 결과를 얻고자 할 때 사용된다. 부동 소수점 연산의 오차란?public class Main { public static void main(String[] args) { double a = 0.1; double b = 0.2; doub..