JAVA · 더_자바_코드를_조작하는_다양한_방법
2부. 바이트코드 조작
- 바이트 코드 조작 => 막강한 기능 - 아무것도 없는 Moja에서 Rabiit을 꺼내는 마술 Moja.java public class Moja { public String pullOut() { return ""; } } Masulsa.java public class Masulsa { public static void main(String[] args)...
2부. 바이트코드 조작
public class Masulsa { public static void main(String[] args) { try { new ByteBuddy.redefine(Moja.class) .method(named("pullOut)).intercept(FixedValue.value("Rabiit!)) .make().saveIn(new File("/Users/...
2부. 바이트코드 조작
- 프로그램 분석 1. 코드에서 버그 찾는 툴 2. 코드 복잡도 계산 - 클래스 파일 생성 1. 프록시 2. 특정 API 호출 접근 제한 3. 스칼라 같은 언어의 컴파일러 - 그밖에도 자바 소스 코드 건드리지 않고 코드 변경이 필요한 여러 경우에 사용할 수 있다 1. 프로파일러 (newrelic) 2. 최적화 3. 로깅 4. ... - 스프링이 컴포넌트 스...
3부. 리플렉션
- 클래스 로딩이 끝나면 클래스 정보를 힙에 넣어준다 - 예를 들어 Book.class의 인스턴스를 사용할 수 있게 된다 - 클래스 인스턴스에 접근하는 방법 - 타입.class - 인스턴스.getClass(); - Class.forName(풀패키지경로); - 필드 가져오기 => getFields() - Array.stream(bookClass.getFiel...
JVM 구조
JVM은 크게 4개 영역으로 구성된다: 클래스 로더 시스템, 메모리, 실행 엔진, 네이티브 인터페이스. --- 메소드 영역(Method Area) - 클래스 수준의 정보 저장: 클래스 이름, 부모 클래스 이름, 메소드, 변수 - static 변수도 여기에 저장 - MyApp.class.getSuperclass() — 메소드 영역에서 정보를 읽어옴 - JVM...
클래스 로더 시스템
JVM이 .class 파일을 읽어서 메모리에 올리는 과정을 담당한다. --- Bootstrap ClassLoader ← JVM 내장 (C/C++), java.lang. 등 핵심 라이브러리 └─ Platform ClassLoader ← Java 9+, 확장 모듈 (java.sql., javax.) └─ Application ClassLoader ← 애플리케이...