JVM
invokedynamic의 내부 동작
invokedynamic의 내부 동작
2022.05.22이 게시글은 자바 8을 기준으로 작성되었습니다. Invokedynamic 아래의 코드를 떠올려봅시다. 람다의 타입은 무엇일까요? 람다는 int, double 같은 기본 타입이 아니므로 참조 타입, 즉 객체의 참조여야 합니다. 다시 말해서, Runnable을 구현하는 클래스의 인스턴스에 대한 참조여야 합니다. package com.company; public class InvokeDynamicExample { public static void main(String [] args) { Runnable r = () -> System.out.println("Hello"); r.run(); } } 이를 javap로 뜯어보면 아래와 같은 바이트코드를 살펴볼 수 있습니다. 여기서는 명령 5~6에서 스택에 푸시된 람다..
JVM. 클래스로더 서브시스템(Class Loader Subsystem)
JVM. 클래스로더 서브시스템(Class Loader Subsystem)
2022.05.16JVM은 RAM에 위치하며, 실행 중에 클래스로더 서브시스템을 이용하여 클래스 파일을 RAM으로 가져옵니다. 이를 자바의 동적 클래스 로딩 기능이라고 합니다. 이 과정은 컴파일 타임이 아니라 런타임에 일어나며, 처음으로 클래스를 참조할 때 클래스 파일(.class)을 로드하고, 링크하고, 초기화 합니다. 로딩(Loading) 컴파일된 클래스(.class 파일)을 메모리에 적재하는 것이 클래스로더(class loader)의 주요 작업입니다. 보통, 클래스 로딩 과정은 메인 클래스(즉, static main() 메서드 선언이 있는 클래스)를 로드하는 것부터 시작됩니다. 이외에도 클래스 로딩은 아래의 상황에서 일어날 수 있습니다. // 클래스에 선언된 정적 메서드를 호출할 때 Car.invokeStaticMe..
정리. JVM의 힙 영역 살펴보기
정리. JVM의 힙 영역 살펴보기
2022.01.22이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
번외. JVM의 구조 살펴보기
번외. JVM의 구조 살펴보기
2022.01.12이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
1편. 자바의 소개
1편. 자바의 소개
2012.07.17자바의 탄생 1990년, 썬 마이크로시스템즈 사의 직원들은 사용하기 어려운 회사 자체의 C/C++ API에 점점 지쳐가고 있었습니다. 엔지니어인 패트릭 노튼(Patrick Naughton)은 이에 불만을 품고 NeXT로 이직을 고려하던 중에 새로운 기술을 연구해보지 않겠냐는 제안을 받았고, 이 제안에 따라서 스텔스 프로젝트가 탄생했습니다. 이 프로젝트는 곧 제임스 고슬링과 마이크 셰리든이 합류하면서 그린 프로젝트로 이름이 바뀌었고, 팀이 만들어지면서 차세대 스마트 가전제품 개발을 위해 신기술 개발에 착수하게 되었죠. 이 팀은 처음엔 C++를 사용하려고 했지만 얼마 지나지 않아서 복잡한 메모리 관리 기능이나 다양한 기능의 부재, 다양한 플랫폼에 이식하기 쉬운 언어의 필요성 등 여러 가지 문제들에 당면하고 ..