본문 바로가기

CS study/java

(16)
JVM 영역의 기본 개념과 GC (24.06.19) JVM 영역 정리JVM은 크게 여러 메모리 영역으로 나눌 수 있다. 각 영역은 특정 목적을 가지고 있으며, 효율적인 메모리 관리를 위해 사용된다. 주요 메모리 영역은 다음과 같다  HeapYoung GenerationEden Space: 객체가 처음 생성되는 공간이다.Survivor Space: Eden에서 살아남은 객체들이 이동하는 공간이다. S0(Survivor 0)와 S1(Survivor 1) 두 개의 영역으로 나뉜다.Old Generation: Young Generation을 거쳐 오래 살아남은 객체들이 이동하는 공간이다.Metaspace클래스 메타데이터를 저장하는 공간이다. JVM 8부터 PermGen이 제거되고 Metaspace로 대체되었다.Stack각 스레드마다 별도로 존재하며, 메서드 호출..
GC - Major, Minor 가비지 컬렉션에 대한 정리 (24.06.05) 개념Minor GC와 Major GC는 JVM의 가비지 컬렉션에서 중요한 역할을 하는 두 가지 유형의 가비지 컬렉션 이벤트이다. 이 두 가지 GC의 차이점과 동작 방식을 자세히 설명하겠다.Minor GC개요:Minor GC는 Young Generation에서 발생하는 가비지 컬렉션이다. Young Generation은 Eden 영역과 두 개의 Survivor 영역(S0, S1)으로 구성된다.동작 방식:Eden 영역이 가득 찰 때 발생:새로운 객체가 주로 Eden 영역에 할당된다. Eden 영역이 가득 차면 Minor GC가 발생한다.생존 객체 이동:Minor GC 동안, Eden 영역의 모든 객체가 검사된다. 살아남은 객체는 Survivor 영역(S0 또는 S1)으로 이동한다.하나의 Survivor 영역..
자바 객체의 메모리 사용량 및 오버헤드 개요 주말에 알고리즘을 풀다가 든 궁금증을 정리하였다. 일반적으로, 우리는 구현이나 시뮬레이션, 그것이 아니더라도 Java 기반의 문제 풀이라면 여러 자료구조 및 커스텀 클래스를 사용하게 된다. (Comparable이라던지.. ) 그리고 이 좌표를 표현하는 데에는 크게 두 가지 방법을 많이 사용하는 듯하다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { int[] pos = {1, 2}; //특정 좌표를 배열로 표현하거나, Pos posClass = new Pos(1, 2); //혹은 이런 식으로 객체 타입으로 표현할 수도 있을 것이다. } } ..
[JVM] 실행 엔진(Execution Engine)과 JIT, 인터프리터 참조 : https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8 ☕ JVM 내부 구조 & 메모리 영역 💯 총정리 저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언 inpa.tistory.com https://coding-factory.tistory.com/828 [Java] 자바 JVM 내부 구조와 메모리 구조에..
[troubleshooting][ClassLoader]동적 클래스로더와 계층 관계 개요와 문제 상황 Instrument API를 사용한 개발 도중, 기본 클래스로더가 아닌, 내가 만든 ClassLoader를 사용하여 동적 클래스를 로드하려고 시도하였다. 이 과정에서 확인차 ForName 등으로 Class 정보를 가져왔는데, 새롭게 얻은 지식을 정리하고자 한다. premain public static void premain(String agentArgs, Instrumentation instrumentation) { Banner.send(agentArgs); //로그 찍기 ConfigRead configRead = new ConfigRead(); //Config Read //CallThread.run(); JMX 쓰레드 생성 및 호출 //새로운 클래스를 생성하는 로직 try { Make..
[JVM]JVM과 ClassLoader 그리고 JIT의 관계 개요 JVM에서 컴파일러에 의해 번역된 Class 바이트코드들은 jar이 빌드되면 '부트스트랩 클래스로더' - '확장 클래스로더' - '시스템 클래스로더'를 읽어가면서 Runtime Area에 메타데이터와 Class 정보들을 저장한다. 이 방식만 보면 Java는 인터프리터라고 할 수 있을 것 같은데 왜 컴파일 방식을 혼합하여 사용한다고 하나? 라는 질문을 보았다. 이에 대해 조사하고, 답변하고자 한다. Java가 인터프리터가 아닌 이유 Java는 "컴파일된 인터프리터 언어"로 종종 설명된다. 이는 Java 프로그램이 바이트코드로 컴파일된 후, Java Virtual Machine(JVM)에서 실행되기 때문이다. Java Virtual Machine(JVM)에서 바이트코드를 처리하는 방식은 실제로 컴파일러..
클래스로더(ClassLoader)정리 클래스로더 클래스 로더는 JVM 내로 클래스 파일(*.class)을 동적으로 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. 컴파일 단계 : complier에 의해 .class 바이트코드로 파일이 변환된다. 런타임 단계 : 런타임(bytecode를 실행할 때) 이 .class 파일을 로드하고 링크한다. 즉, 런타임 단계에서 로드된 바이트 코드(.class)들을 엮어서 JVM의 메모리 영역인 Runtime Data Areas에 배치한다. 클래스를 메모리에 올리는 로딩 기능은 한번에 메모리에 올리지 않고, 어플리케이션에서 필요한 경우 동적으로 메모리에 적재하게 된다. 클래스 파일의 로딩 순서 JVM에서 클래스를 로드하고 실행하는 과정은 크게 로딩(Loading), 링크(Linking), 초기화(I..
함수형 프로그래밍 패러다임 Lambda와 Stream을 다루면서, 이것을 잘 활용할 수 있는 함수형 프로그래밍의 개념도 같이 정리해보고자 한다. https://csg1353.tistory.com/213 람다(Lambda)식의 정의와 함수형 인터페이스 https://www.youtube.com/watch?v=4ZtKiSvZNu4 먼저 해당 포스팅은 다음 유튜브 설명을 참조했음을 미리 밝힌다. 이해에 큰 도움이 되니 확인해보길 권장한다. 기초 개념 자바에서 람다 표현식과 스트림 API는 csg1353.tistory.com https://csg1353.tistory.com/214 함수형 프로그래밍이 뭔가요? 사전적 개념 함수형 프로그래밍(Functional Programming, FP)은 프로그래밍 패러다임 중 하나로, 계산을 수학적 ..