SlideShare a Scribd company logo
< Te r m P r o j e c t : S u r v e y o n P r o g r a m m i n g P a r a d i g m s >
JVM의 메모리 관리
과목명: 프로그래밍언어
소속: IT대학 컴퓨터학부
제출일: 2019.05.16
학번: 20142377
이름: 심승철
0
0
0
1
WORA(WriteOnceRunAnywhere)
1
그림 출처:https://d2.naver.com/helloworld/1230
자바컴파일러
ClassLoader RuntimeData Areas
실행엔진
1.
J V M 메 모 리 영 역 에 자 바 바 이 트 코 드 로 드
1
-ClassLoader는JVM내로Class를Load하고Link를통해적절히배치하는일
련의작업을수행한다.
-ClassLoader의최종종착지는RuntimeDataAreas의MethodArea이다.
그림 출처:http://bitly.kr/FimpqH
1
https://liebus.tistory.com/30
계층형구조입니다
1
JVM의수행을위한 class
https://liebus.tistory.com/30
1
https://liebus.tistory.com/30
1
https://liebus.tistory.com/30
1
https://www.slideshare.net/novathinker/4-class-loader
Loading
클래스 변수들을 적절한 값으로 초기화한다. 즉,
static initializer들을 수행하고, static 필드들을 설정된 값으로
초기화한다.
1
2.
2
JVM이 프로그램을 수행하기 위해 OS로 부터 할당 받는 메모리 영역
스레드마다 하나씩 생성되는 영역
모든 스레드가 공유하여 사용하는영역
그림 출처:https://d2.naver.com/helloworld/1230
2
Push.
제거(pop)
그림 출처: JVM Tutorials - Herong's Tutorial
2
LocalVariable OperandStack FrameData 세부분
그림 출처: JVM Tutorials - Herong's Tutorial그림 출처: https://slideplayer.com/slide/10540943/
this (class JVM instance의)
Int a
char b
long c
float d
Object e
double f
String g
byte h
short I
boolean j
2
Method의Parametervariable과LocalVariable
인덱스를가진배열
char,byte,short,boolean int형으로할당된다 long,double 두개의배열공간을
0번인덱스는 Class의Instance데이터를
primitiveType인경우LVS에고정된크기로할당되지만 Object나Array,String과같은객체는heap에저장되기
reference
primitiveType이성능적으로이점이
그림 출처: https://slideplayer.com/slide/10540943/
class Jvm{
public int jvmMethod(int a,, char b long c,
float d, object e, double f, String g, byte h,
short i, boolean j){
return 0;
}
}
0(인덱스) reference(값)
1 int
2 int
3 long
5 float
6 reference
7 double
9 reference
10 int
11 int
12 int
Heap
jvmMethod파라미터의LocalVariableSection
2
- JVM의작업공간이다
그림 출처: https://slideplayer.com/slide/10540943/ 그림 출처: http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html
2
ConstantPoolResolution(힙에위치한object들의주소를담고있는Pool의Pointer)
-Method가정상종료
-Method가비정상종료
그림 출처: https://slideplayer.com/slide/10540943/
linking과정에symbolicreference(참조대상의이름)에서
실제메모리주소로변경
2
JVM이 프로그램을 수행하기 위해 OS로 부터 할당 받는 메모리 영역
스레드마다 하나씩 생성되는 영역
모든 스레드가 공유하여 사용하는영역
그림 출처:https://d2.naver.com/helloworld/1230
2
NativeMethodStack
그림 출처: http://egloos.zum.com/gggura/v/3685641
2
두Stack영역을구분하지않는다
JavastackFrame인지아니면NativeStackFrame인지를구분할뿐이다
그림 출처: http://egloos.zum.com/gggura/v/3685641
stack
Frame
stack
Frame1
stack
Frame
stack
Frame
stack
Frame
2
Stack-Base
jvm
PC
Register
int a;
int b;
int c = a + b;
iload_0
iload_1
iadd
Source code Bytecode
2
그림 출처:https://d2.naver.com/helloworld/1230
2
static)
그림 출처: Java Tutorial
2
Instance Array
구현은전적으로벤더들(oracle,IBM)에게일임하게
HotspotJVM(oracle)
public class test {
public static void main(String[] args){
Heap heap = new Heap(); //객체는 Heap에 저장된다.
int[] a={1,2,3}; //배열을 Heap에 저장된다.
}
}
class Heap{
int heaptest = 0;
}
2
-YoungGeneration Eden Survivor
Object의참조여부를
GarbageObject
-Survivor 살아남은Object Survivor영역은두개로구성
그림 출처: https://i.stack.imgur.com/bN2Tu.png
-OldGeneration
2
고정크기인Header와가변크기의Data
MarkWord GrabageCollector Synchronization
MethodArea
ArraySize
그림 출처: https://novathink.kr/49
ObjectData
첫 번째 헤더인 Mark Word
2
그림 출처: http://leechae0.blogspot.com/2013/05/java-performance-fundamental-chapter-2.html
3.
자 바 어 플 리 케 이 션 실 행
1
그림 출처:https://d2.naver.com/helloworld/1230
자바컴파일러
ClassLoader RuntimeData Areas
실행엔진
3
출처:JAVA Code Geeks
그림 출처:https://www.slideshare.net/novathinker/5-execution-engine
3
Interpreter방식이
Bytecode를해석하는시간이짧다는
반복수행해야하는코드
JITCompiler
그림 출처: http://bitly.kr/VUAGqC
int a;
int b;
int c = a + b;
iload_0
iload_1
iadd
Id[$fp-0], $r0
st $r0, [$sp+0]
Id[$fp-4], $r1
st $r1, [$sp+4]
Id [$sp+0], $r0
Id [$sp+0], $r1
add $r0, $r1, $r2
st $r2, [$sp+0]
Source code Bytecode Native code
3
# Java 7 이전 JVM에서는 server vm일 경우 default로 10000번 이상 interpreted 할 경우 JIT Compiler를 사용하고,
client vm일 경우 default로 1000번 이상 interpreted 할 경우 JIT Compiler를 사용한다.
# Java 8 이후 JVM에서는 server vm일 경우 defaul로 10000번 이상 interpreted 할 경우 JIT Compiler를 사용하고,
client vm일 경우 defaul로 1500번 이상 interpreted 할 경우 JIT Compiler를 사용한다.
3
장점: 개발자들로 하여금 Memory 관련 문제에서 큰 고민을 하지 않게 해주었다.
프로그램 구동 시 예기치 않은 Memory Corruption이 발생하는 위험성을 줄여준다.
단점: Garbage Collection이 작동하는 동안 프로그램을 수행하는 과정이 멈춘다.
CPU의 사용에 민감한 프로그램의 경우 CPU Time 스케줄링에 어려움을 주기도 한다.
3
Heap공간을재활용하려는목적으로
메모리단편화를방지하기
그림 출처:https://engineering.linecorp.com/ko/blog/go-gc/
3
아래세가지로구분한다.
그림 출처:https://d2.naver.com/helloworld/329631
Jvm 작동원리
4
4
자바의바이트코드(.class파일) .dex로컴파일
레지스터기반
레지스터기반
실행시간이더짧기
그림 출처: http://bitly.kr/kSZN2S
그림 출처: https://www.slideshare.net/ShivamSharma490/dvm-91069091
https://www.usenix.org/legacy/events/vee05/full_papers/p153-yunhe.pdf
4
4.4 킷켓에 추가, 5.0 롤리팝에 달빅 폐지
Ahead-Of-Time
CPU소모가적다
그림 출처: http://bitly.kr/kSZN2S
Jvm 작동원리
5
WORA(WriteOnce,RunAnywhere)
안드로이드라는 플랫폼은 다양한 스마트폰 디바이스에서 사용된다. 이때 하드웨어, 플랫폼에 구애 받지
않고 어디서든 동작할 수 있는 자바라는 언어는 굉장히 매력적으로 보였을 것이다.
추후 기술선택을 하게 된다면 해당 언어의 철학을 살펴보고, 그 관련 기술을 살펴본다면 도움이 될 것이라
생각한다.
0
https://namu.wiki/w/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%20%EB%9F%B0%ED%83%80%EC%9E%84
https://android.jlelse.eu/closer-look-at-android-runtime-dvm-vs-art-1dc5240c3924[3]
https://d2.naver.com/helloworld/1230
https://javapapers.com/core-java/java-jvm-run-time-data-areas/
https://javabeat.net/jvm-memory/
http://egloos.zum.com/gggura/v/3685556
https://mygumi.tistory.com/115
https://javabeat.net/jvm-memory/
http://leechae0.blogspot.com/2013/05/java-performance-fundamental-chapter-2.html
https://brunch.co.kr/@kd4/1
https://speckyfox.com/java-essentials/how-java-heap-and-stack-area-works-during-code-execution/
https://www.baeldung.com/java-stack-heap
https://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
https://www.quora.com/What-is-the-difference-between-JVM-DVM-KVM-and-ART
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0
https://android.jlelse.eu/closer-look-at-android-runtime-dvm-vs-art-1dc5240c3924

More Related Content

PDF
Java(2/4)
PDF
Java(1/4)
PDF
Introduction to Fork Join Framework_SYS4U I&C
PDF
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
PPTX
Jdk(java) 7 - 5. invoke-dynamic
PDF
Clean code appendix 1
PDF
Java 강의자료 ed11
PDF
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
Java(2/4)
Java(1/4)
Introduction to Fork Join Framework_SYS4U I&C
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
Jdk(java) 7 - 5. invoke-dynamic
Clean code appendix 1
Java 강의자료 ed11
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화

What's hot (9)

PDF
android_thread
PDF
Java class
PDF
Anatomy of Realm
PPTX
파이썬 병렬프로그래밍
PDF
Java lambda
PPTX
5-5. html5 connectivity
PDF
Android ndk jni 설치및 연동
PDF
Java programming pdf
PDF
Java 변수자료형
android_thread
Java class
Anatomy of Realm
파이썬 병렬프로그래밍
Java lambda
5-5. html5 connectivity
Android ndk jni 설치및 연동
Java programming pdf
Java 변수자료형
Ad

Similar to Jvm 작동원리 (14)

PPTX
스프링 어플리케이션의 문제해결사례와 안티패턴
PPTX
Java Virtual Machine, Call stack, Java Byte Code
PDF
Python Programming: Class and Object Oriented Programming
PPTX
Flyweight
PDF
[Hello world 오픈세미나]open api client개발
PDF
Java 기초
PDF
Java_01 기초
PDF
일단 시작하는 코틀린
PDF
Hotspot JVM GC_Wh apm
PDF
Feature Pyramid Network, FPN
PDF
Javascript 조금 더 잘 알기
PDF
안드로이드 빌드: 설탕없는 세계
PPTX
Java 어플리케이션 성능튜닝 Part2
PDF
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
스프링 어플리케이션의 문제해결사례와 안티패턴
Java Virtual Machine, Call stack, Java Byte Code
Python Programming: Class and Object Oriented Programming
Flyweight
[Hello world 오픈세미나]open api client개발
Java 기초
Java_01 기초
일단 시작하는 코틀린
Hotspot JVM GC_Wh apm
Feature Pyramid Network, FPN
Javascript 조금 더 잘 알기
안드로이드 빌드: 설탕없는 세계
Java 어플리케이션 성능튜닝 Part2
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
Ad

Jvm 작동원리