본문 바로가기
728x90
반응형

전체 글72

[JVM 파헤치기] 02. 자바 메모리 영역과 메모리 오버플로(2) 핫스팟 가상 머신에서의 객체객체 생성자바는 객체 지향 프로그래밍 언어로 자바 프로그램이 동작하는 동안 수시로 객체가 만들어짐언어 수준에서의 객체 생성은 보통 new 키워드를 쓰면 끝나지만 가상 머신 수준에서의 객체 생성 과정 new 명령에 해당하는 바이트코드를 만나면 이 명령의 매개 변수가 상수 풀 안의 클래스를 가리키는 심벌 참조인지 확인심벌 참조가 뜻하는 클래스가 로딩, 해석(reslove), 초기화(initialize) 되었는지 확인(준비되지 않은 클래스라면 로딩부터 해야 함)로딩이 완료된 클래스라면 새 객체를 담을 메모리 할당객체에 필요한 메모리 크기는 클래스를 로딩하고 나면 완벽하게 알 수 있음객체용 메모리 공간 할당은 자바 힙에서 특정 크기의 메모리 블록을 잘라 주는 일이라 할 수 있음메모리 .. 2025. 3. 24.
[JVM 파헤치기] 02. 자바 메모리 영역과 메모리 오버플로(1) 자바 개발자는 가상 머신이 제공하는 자동 메모리 관리 메커니즘 덕에 메모리 할당과 해제를 코딩하지 않아도 메모리 누수나 오버플로 문제를 거의 겪지 않음하지만 통제권을 위임했기 때문에 문제가 한 번 터지면 가상 머신의 메모리 관리 방식을 이해하지 못하는 한 해결하기가 상당히 어려움런타임 데이터 영역자바 가상 머신은 자바 프로그램을 실행하는 동안 메모리를 몇 개의 데이터 영역으로 나누어 관리하며 영역별로 목적과 생성/삭제 시점이 있음프로그램 카운터PC 레지스터는 작은 메모리 영역이지만, JVM의 멀티스레딩 구현과 프로그램 실행 흐름 제어에 핵심적인 역할을 함작은 메모리 영역으로 현재 실행 중인 스레드의 바이트 코드 줄 번호를 가르키는 표시기각 스레드마다 별도의 스택 보유(스레드 프라이빗 메모리)스레드와 동일.. 2025. 3. 23.
[JVM 파헤치기] 01.자바 기술 시스템 소개(2) 자바 가상 머신 제품군썬 클래식 VM세계 최초의 상용 자바 가상 머신자바 코드를 순전히 인터프리터 방식으로 실행JIT 컴파일러를 사용하려면 플러그인을 추가하면 됐는데 플러그인 하는 순간 인터프리터는 더 이상 동작하지 않고 가상 머신의 실행 시스템 전체가 JIT 컴파일러에 넘어가는 구조였음당시 인터프리터와 컴파일러는 함께 구동되지 않았기 때문에 컴파일러를 사용하기 시작하면 실행 빈도 등 컴파일에 따른 득실과 상관없이 코드 전체를 컴파일해야 해서 자칫하면 프로그램 응답 속도가 너무 느려져 오래 걸리는 최적화 기법은 적용할 수 없었음JDK 1.2가 출시되기 전까지 JDK와 함께 배포된 유일한 가상머신. 핫스팟 VM과 공존했던 JDK 1.2에서도 기본은 클래식 VM이었음 이그잭트 VM핫스팟 검출, 2단계 JIT.. 2025. 3. 18.
[JVM 파헤치기] 01. 자바 기술 시스템 소개(1) 자바의 대표적인 특징- 하드웨어 플랫폼이라는 족쇄를 제거하여 한 번 작성하면 어디서든 실행된다 라는 이상을 실현- 안전한 메모리 관리 시스템을 갖춘 덕에 메모리 누수 문제와 엉뚱한 메모리를 가리키는 문제 대부분을 피할 수 있음- 런타임에 핫 코드(빈번하게 실행되어 전체 성능에 영향을 크게 주는 코드)를 감지, 컴파일하고 최적화하여 자바 애플리케이션이 최상의 성능을 내도록 도와줌- 표준 API 자체가 풍부할 뿐 아니라 수많은 기업과 오픈 소스 커뮤니티에서 제공하는 다양한 기능의 서드 파티 라이브러리를 활용할 수 있음 자바 기술 시스템자바 가상 머신 위에서 동작하는 코틀린, 클로저(Clojure), JRuby, 그루비 등의 프로그래밍 언어와 그 외 관련된 자바 프로그램들도 자바 기술 시스템에 속하는 것으로 .. 2025. 3. 17.
Java 에서의 동시성 관리 방법 Synchronized키워드를 메서드나 블록에 적용해 해당 코드 블록에 접근할 때 하나의 스레드만 접근할 수 있도록 보장락을 잡고 있는 동안 다른 스레드들은 해당 자원을 사용하지 못하기 때문에 경합이 발생하여 성능 저하가 일어날 수 있음락을 과도하게 사용하면 데드락 문제도 발생할 수 있음ReentrantLockLock 인터페이스를 구현한 클래스. 락을 명시적으로 관리할 수 있게 함락을 획득할 때 타임아웃 설정이나 중단할 수 있는 기능을 제공함synchronized보다 여러 조건을 처리하는데에 유리락을 획득하는데 실패할 경우 재시도를 하거나 특정 시간내에 락을 획득하지 못하면 다른 처리를 할 수 있음Lock lock = new ReentrantLock();lock.lock();try { // 작업 수.. 2025. 1. 27.
JVM 구성 요소클래스 로더 서브 시스템(Class Loader Subsystem)자바 .class 파일을 읽어 JVM 메모리 적재역할로딩: .class 파일 로드링크: 클래스간 종속성 해결초기화: 정적 필드와 정적 블록을 실행하여 초기화런타임 데이터 영역 (Runtime Data Areas)Method Area클래스의 메타데이터, 정적 변수, 상수 풀(Constant Pool) 저장모든 스레드가 공유Heap객체와 배열이 저장되는 공간모든 스레드가 공유하며 Garbage Colletor가 관리Stack각 스레드마다 별도로 생성되는 영역으로 메서드 호출과 관련된 로컬 변수, 매개 변수, 연산 중간 결과 저장LIFO(Last In First Out) 구조PC Register각 스레드마다 생성되며 현재 실행중인 명령.. 2025. 1. 26.
728x90
반응형