SlideShare a Scribd company logo
JVM
jvm : 자바 가상 머신 (java virtual machine)
진짜 컴퓨터 안에 자바언어가 돌아가는 가상의 컴퓨터를 말한다.
자바 코드는 ~.java 파일로
써진다.
~.class(byte code)로 컴파
일(번역)을 한다.
이 byte code 는 jvm 에
input 된다.
jvm 은 코드를 읽고 해석
해서 프로그램을 실행한다.
이때 JVM 은 코드를 운영체제에 맞게 실행한다.
window면 window 에 맞게,
맥이면 맥에 맞게,
리눅스면 리눅스에 맞게,
알아서 실행해주니까
믿고 쓰면 된다.
JVM 내부 구조
The Stack
메서드 안에서 사용되어지는 값들 저장, 호출
된 메서드의 매개변수, 지역변수, 리턴 값 및
연산 시 일어나는 값들을 임시로 저장
stack 안에는 stack frame 이 쌓이는데
stack manipulation을 돕는 세명의 레지스터
가 있다.
vars, frame, optop 이다.
vars -> 로컬변수를
frame -> execution environment을
optop -> method area fmf
JVM 내부 구조
garbage-collected heap
자바프로그램의 객체들이 저장된다.
우리가 직접 alloc(동적할당) 하지 않고 자동으로 관리한다.
힙 영역의 메모리공간이 부족하게 되면 자동으로 가비지컬렉션이
수행된다.
힙 영역 공간이 너무 크다면 그간 쌓여있던 모든 old 객체들을 지운다.
JVM 내부 구조
Method Area
바이트 코드들을 담고 있는 영역이다.
program counter 가 method area 안에 바이트들을
가리키고 있다.
또한 클래스의 전역변수인 클래스 변수(static) 위치
JVM에서 실행되고 있는 모든 스레드에 의해 공유
아래의 소스를 이해하고 JVM의 메모리 모델을 그려보세요
(메소그 영역, 스택, 힙)
class Point {
int x, y;
void move(int x, int y) {
this.x = x;
this.y = y;
}
int getX() { return(x); }
int getY() { return(y); }
void setX(int x) { this.x = x; }
void setY(int y) { this.y = y; }
void draw() {
System.out.println( "Point(" + x + "," + y + ")");
}
}
class PointTest {
public static void main(String[] args) {
Point p1, p2 = null;
p1 = new Point();
p1.move(4, 4);
p2 = new Point();
p2.move(2, -4);
}
}
아래의 소스를 이해하고 JVM의 메모리 모델을 그려보세요
(메소그 영역, 스택, 힙)
class Point {
int x, y;
void move(int x, int y) {
this.x = x;
this.y = y;
}
int getX() { return(x); }
int getY() { return(y); }
void setX(int x) { this.x = x; }
void setY(int y) { this.y = y; }
void draw() {
System.out.println( "Point(" + x + "," + y + ")");
}
}
class PointTest {
public static void main(String[] args) {
Point p1, p2 = null;
p1 = new Point();
p1.move(4, 4);
p2 = new Point();
p2.move(2, -4);
}
}
1. JVM은 PointTest 클래스를 메소드 영역
에 main의 바이트코드 로드하고 main을 실
행
2. main실행시 들어오는 인자 args를 main
의 스택에 저장하고 null로 초기화 한다.
3. p1. p2를 스택에 저장하고 p1은 빈값, p2
는 null로 초기화 한다.
4. p1 = new Point() 에 의해 Point 객체를
힙에 생성하고 어드레스를 p1 에서 보관
(스택변수 p1이 메모리 힙의 Point 객체를
참조한다)
5. 메모리힙에 있는 p1이 참조하고 있는
Point객체의 x, y를 4, 4 로 셋팅
move 메소드가 실행되는 동안 move의
스택영역에 로컬변수 x, y,를 할당하고 4을
대입 후
인스턴스 변수 x, y에 대입 (this.x = x,
this.y=y)
move 메소드가 끝나면 로컬변수 x, y를
스택에서 해제
6. 이하 동일
Garbage Collection
객체는 살아있는 Thread나 static 참조를 통해 도달할 수 없게 된다면 GC 대
상이 된다. 다시말해 모든 객체의 참조가 모두 null 일 경우에 GC 대상이 된다.
Garbage Collection
힙은 Young, Tenured(=Old), Permanent(=Perm Area)
Generation의 세 영역으로 나뉜다. 또 Young Generation은
Eden, Survivor1, Survivor2 영역으로 나뉜다. 객체는 처음 생성
될 때 Young Generation의 Eden 영역에 생성된다. Minor GC 이
후 객체가 살아있다면 Survivor1로 옮겨진다. Major GC 전에
Survivor2의 객체는 Tenured Generation으로 옮겨진다.
Permanent Generation은 클래스나 메소드 등의 메타데이터를
저장하거나 String Pool의 공간으로 사용되어지는 조금 특별한
공간이다.
Garbage Collection

More Related Content

PPTX
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
PDF
Modern C++ 프로그래머를 위한 CPP11/14 핵심
PDF
동시성 프로그래밍 하기 좋은 Clojure
PDF
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
PPTX
Javascript introduction, dynamic data type, operator
PPTX
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
PPTX
프론트엔드스터디 E05 js closure oop
PDF
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Modern C++ 프로그래머를 위한 CPP11/14 핵심
동시성 프로그래밍 하기 좋은 Clojure
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
Javascript introduction, dynamic data type, operator
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
프론트엔드스터디 E05 js closure oop
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive

What's hot (20)

PDF
Lock free queue
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PPTX
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
PDF
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
PPTX
프론트엔드스터디 E04 js function
PPTX
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
PPTX
Let's Go (golang)
PDF
Java lambda
PPTX
Windws via c/c++ chapter 6
PDF
Javascript 교육자료 pdf
PDF
LockFree Algorithm
PDF
Javascript개발자의 눈으로 python 들여다보기
PPTX
모어이펙티브 C++ 3,4장 예외, 효율 스터디
PDF
7가지 동시성 모델 4장
PDF
비동기 파일 로딩
PPTX
7가지 동시성 모델 - 3장. 함수형 프로그래밍
PDF
[C++ Korea 2nd Seminar] C++17 Key Features Summary
PPTX
tcp ip study
PPTX
자바스크립트 기초문법~함수기초
PPTX
WTL 소개
Lock free queue
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
프론트엔드스터디 E04 js function
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
Let's Go (golang)
Java lambda
Windws via c/c++ chapter 6
Javascript 교육자료 pdf
LockFree Algorithm
Javascript개발자의 눈으로 python 들여다보기
모어이펙티브 C++ 3,4장 예외, 효율 스터디
7가지 동시성 모델 4장
비동기 파일 로딩
7가지 동시성 모델 - 3장. 함수형 프로그래밍
[C++ Korea 2nd Seminar] C++17 Key Features Summary
tcp ip study
자바스크립트 기초문법~함수기초
WTL 소개
Ad

Similar to Jvm (20)

PDF
Jvm 작동원리
PDF
Runtime Data Areas_Wh apm
PPTX
Java Virtual Machine, Call stack, Java Byte Code
PPTX
Java mentoring of samsung scsc 2
PPTX
Java memory
PDF
Hotspot JVM GC_Wh apm
PDF
Java_01 기초
PDF
Java 기초
PDF
Java 8 고급 (2/6)
PDF
Java 강의자료 ed11
PDF
From Java code to Java heap_SYS4U I&C
PDF
Java(1/4)
PDF
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
PPTX
IBM JVM 소개 - Oracle JVM 과 비교
PDF
2023.05.01 발표 자료 : 자바의 기초
PPTX
Just java
PDF
IBM JVM GC_Wh apm
PDF
Sonarqube 20160509
PDF
Java performance and trouble shooting
PPTX
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
Jvm 작동원리
Runtime Data Areas_Wh apm
Java Virtual Machine, Call stack, Java Byte Code
Java mentoring of samsung scsc 2
Java memory
Hotspot JVM GC_Wh apm
Java_01 기초
Java 기초
Java 8 고급 (2/6)
Java 강의자료 ed11
From Java code to Java heap_SYS4U I&C
Java(1/4)
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
IBM JVM 소개 - Oracle JVM 과 비교
2023.05.01 발표 자료 : 자바의 기초
Just java
IBM JVM GC_Wh apm
Sonarqube 20160509
Java performance and trouble shooting
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
Ad

More from 경륜 이 (6)

PDF
Spring Boot 2
PDF
Spring Boot 1
PDF
노드js 기초
PDF
PPTX
Hundreds
PPTX
Hundred
Spring Boot 2
Spring Boot 1
노드js 기초
Hundreds
Hundred

Jvm

  • 1. JVM jvm : 자바 가상 머신 (java virtual machine) 진짜 컴퓨터 안에 자바언어가 돌아가는 가상의 컴퓨터를 말한다.
  • 2. 자바 코드는 ~.java 파일로 써진다. ~.class(byte code)로 컴파 일(번역)을 한다. 이 byte code 는 jvm 에 input 된다. jvm 은 코드를 읽고 해석 해서 프로그램을 실행한다.
  • 3. 이때 JVM 은 코드를 운영체제에 맞게 실행한다. window면 window 에 맞게, 맥이면 맥에 맞게, 리눅스면 리눅스에 맞게, 알아서 실행해주니까 믿고 쓰면 된다.
  • 4. JVM 내부 구조 The Stack 메서드 안에서 사용되어지는 값들 저장, 호출 된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장 stack 안에는 stack frame 이 쌓이는데 stack manipulation을 돕는 세명의 레지스터 가 있다. vars, frame, optop 이다. vars -> 로컬변수를 frame -> execution environment을 optop -> method area fmf
  • 5. JVM 내부 구조 garbage-collected heap 자바프로그램의 객체들이 저장된다. 우리가 직접 alloc(동적할당) 하지 않고 자동으로 관리한다. 힙 영역의 메모리공간이 부족하게 되면 자동으로 가비지컬렉션이 수행된다. 힙 영역 공간이 너무 크다면 그간 쌓여있던 모든 old 객체들을 지운다.
  • 6. JVM 내부 구조 Method Area 바이트 코드들을 담고 있는 영역이다. program counter 가 method area 안에 바이트들을 가리키고 있다. 또한 클래스의 전역변수인 클래스 변수(static) 위치 JVM에서 실행되고 있는 모든 스레드에 의해 공유
  • 7. 아래의 소스를 이해하고 JVM의 메모리 모델을 그려보세요 (메소그 영역, 스택, 힙) class Point { int x, y; void move(int x, int y) { this.x = x; this.y = y; } int getX() { return(x); } int getY() { return(y); } void setX(int x) { this.x = x; } void setY(int y) { this.y = y; } void draw() { System.out.println( "Point(" + x + "," + y + ")"); } } class PointTest { public static void main(String[] args) { Point p1, p2 = null; p1 = new Point(); p1.move(4, 4); p2 = new Point(); p2.move(2, -4); } }
  • 8. 아래의 소스를 이해하고 JVM의 메모리 모델을 그려보세요 (메소그 영역, 스택, 힙) class Point { int x, y; void move(int x, int y) { this.x = x; this.y = y; } int getX() { return(x); } int getY() { return(y); } void setX(int x) { this.x = x; } void setY(int y) { this.y = y; } void draw() { System.out.println( "Point(" + x + "," + y + ")"); } } class PointTest { public static void main(String[] args) { Point p1, p2 = null; p1 = new Point(); p1.move(4, 4); p2 = new Point(); p2.move(2, -4); } } 1. JVM은 PointTest 클래스를 메소드 영역 에 main의 바이트코드 로드하고 main을 실 행 2. main실행시 들어오는 인자 args를 main 의 스택에 저장하고 null로 초기화 한다. 3. p1. p2를 스택에 저장하고 p1은 빈값, p2 는 null로 초기화 한다. 4. p1 = new Point() 에 의해 Point 객체를 힙에 생성하고 어드레스를 p1 에서 보관 (스택변수 p1이 메모리 힙의 Point 객체를 참조한다) 5. 메모리힙에 있는 p1이 참조하고 있는 Point객체의 x, y를 4, 4 로 셋팅 move 메소드가 실행되는 동안 move의 스택영역에 로컬변수 x, y,를 할당하고 4을 대입 후 인스턴스 변수 x, y에 대입 (this.x = x, this.y=y) move 메소드가 끝나면 로컬변수 x, y를 스택에서 해제 6. 이하 동일
  • 9. Garbage Collection 객체는 살아있는 Thread나 static 참조를 통해 도달할 수 없게 된다면 GC 대 상이 된다. 다시말해 모든 객체의 참조가 모두 null 일 경우에 GC 대상이 된다.
  • 11. 힙은 Young, Tenured(=Old), Permanent(=Perm Area) Generation의 세 영역으로 나뉜다. 또 Young Generation은 Eden, Survivor1, Survivor2 영역으로 나뉜다. 객체는 처음 생성 될 때 Young Generation의 Eden 영역에 생성된다. Minor GC 이 후 객체가 살아있다면 Survivor1로 옮겨진다. Major GC 전에 Survivor2의 객체는 Tenured Generation으로 옮겨진다. Permanent Generation은 클래스나 메소드 등의 메타데이터를 저장하거나 String Pool의 공간으로 사용되어지는 조금 특별한 공간이다. Garbage Collection