본문 바로가기

전체 글

(215)
[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)에서 바이트코드를 처리하는 방식은 실제로 컴파일러..
[A Java bytecode engineering library] - [Tree API] 7. Method 개인 학습 정리 MethodNode public class MethodNode extends MethodVisitor { public int access; // 메서드의 접근 제어자. 예: ACC_PUBLIC, ACC_PRIVATE 등 public String name; // 메서드 이름 public String desc; // 메서드 서술자(descriptor). 매개변수와 반환 타입 포함 public String signature; // 메서드 시그니처. 제네릭 정보 포함 public List exceptions; // 메서드가 던질 수 있는 예외 타입 목록 public List parameters; // 메서드 매개변수 목록 public List visibleAnnotations; // 런타임에서 ..
클래스로더(ClassLoader)정리 클래스로더 클래스 로더는 JVM 내로 클래스 파일(*.class)을 동적으로 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. 컴파일 단계 : complier에 의해 .class 바이트코드로 파일이 변환된다. 런타임 단계 : 런타임(bytecode를 실행할 때) 이 .class 파일을 로드하고 링크한다. 즉, 런타임 단계에서 로드된 바이트 코드(.class)들을 엮어서 JVM의 메모리 영역인 Runtime Data Areas에 배치한다. 클래스를 메모리에 올리는 로딩 기능은 한번에 메모리에 올리지 않고, 어플리케이션에서 필요한 경우 동적으로 메모리에 적재하게 된다. 클래스 파일의 로딩 순서 JVM에서 클래스를 로드하고 실행하는 과정은 크게 로딩(Loading), 링크(Linking), 초기화(I..
5972 - 택배 배송(G5) 문제 농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는 구두쇠라서 최소한의 소들을 만나면서 지나가고 싶습니다. 농부 현서에게는 지도가 있습니다. N (1
요격 시스템 (LV.2) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다. A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용..
함수형 프로그래밍 패러다임 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)은 프로그래밍 패러다임 중 하나로, 계산을 수학적 ..