주니어 개발자도 이해 할 수 있는 아름다운 jvm 세상
DESCRIPTION
Bueatiful JVM WorldTRANSCRIPT
![Page 1: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/1.jpg)
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
2014. 11Darion Kim
![Page 2: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/2.jpg)
나는 누구?Darion Kim (김헌기)
디에스멘토링 연구소 수석보
자칭 통신(통합의 신, God of Integration)
https://www.facebook.com/groups/serverside (율이아빠)
![Page 3: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/3.jpg)
이 문서를 모든 Freshman에게 바칩니다.
(for YMS, JHJ)
![Page 4: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/4.jpg)
이미 JVM에 대해서 아시거나 시니어 개발자분들은 여기까지만 …
![Page 5: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/5.jpg)
약속드립니다.절대 어렵게 얘기하지 않겠습니다.
![Page 6: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/6.jpg)
아름다운 JVM 세상을 만나 볼 준비가 되
셨습니까?
![Page 7: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/7.jpg)
사람들은 JVM을 뭐라고 얘기할까요?
![Page 8: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/8.jpg)
JVM=
Java Virtual Machine
![Page 9: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/9.jpg)
그 다음부터는 무진장 어렵게 얘기하더라구요. ㅠㅠ
![Page 10: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/10.jpg)
저는 어떻게 얘기할까요?
![Page 11: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/11.jpg)
혹시 프로그램(Program) 은 아세요?
![Page 12: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/12.jpg)
프로그램을 실행하면 프로세스(Process)가 생성됩니다.
![Page 13: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/13.jpg)
좀더 자세히 설명하면?
디스크(Disk)에 있는 프로그램 파일(File)을 실행한다.
프로그램 파일이 메모리(Memory) 적재되면서 프로세스화 되어 프로세서(CPU)를 사용한다.
![Page 14: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/14.jpg)
그림으로도 그려볼까요?
DiskProgram.exe Loading
Memory
CPU
Process
![Page 15: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/15.jpg)
Process는 Disk, File, Memory, CPU와 관련되어 있네요.
기억해두세요.
![Page 16: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/16.jpg)
JVM=
Process이라고 가정한다면
![Page 17: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/17.jpg)
JVM도 Process 처럼 실행할수 있겠네요.
![Page 18: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/18.jpg)
에이~ 다들 아시면서… ^^
![Page 19: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/19.jpg)
java -cp 라이브러리 메인클래스
![Page 20: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/20.jpg)
좀더 자세히 설명하면?디스크에 있는 java 프로그램에 메인클래스를 지정하여 실행한다.
-cp 옵션을 주어 라이브러리도 지정하여 실행한다.
라이브러리는 디렉토리, *.jar, *.zip 파일 절대경로이다.
![Page 21: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/21.jpg)
Disk
그림으로도 그려볼까요?
java
Loading
Memory
CPU
JVM
Main.class Main
LibraryLibrary
![Page 22: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/22.jpg)
JVM도 Process 맞네요.
![Page 23: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/23.jpg)
끝까지 아니라고 하시는 분들은 여기까
지만 …
![Page 24: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/24.jpg)
자~ 그러면 좀더 심도있게 들어가 볼까요?
![Page 25: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/25.jpg)
JVM 안쪽에서는 어떤일들이 벌어질까
요?
![Page 26: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/26.jpg)
그럼 우선 Creator와 Class와 Object, Instance의 차이를 알아야 합니다.
![Page 27: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/27.jpg)
좀더 자세히 설명하면?Creator = 조물주, 바로 여러분 입니다.
Class(*.class)는 조물주가 만든 뼈대입니다.
Class는 Object화 됩니다. = Instance
그말은 뼈대에 생명력을 불어넣으면 객체가 됩니다.
![Page 28: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/28.jpg)
그림으로도 그려볼까요?
Class Object Instance
Creator
![Page 29: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/29.jpg)
자~ 다시 Class, Object를 기억해주세요.
![Page 30: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/30.jpg)
이제 정말로 아름다운 JVM 세상으로 들어갑니다. ^^
![Page 31: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/31.jpg)
아름다운 JVM 세상을 추상적으로 그려
봅니다.
![Page 32: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/32.jpg)
중요한 것은 쉽게 그립니다.
![Page 33: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/33.jpg)
정확한 기술 스펙이 보고 싶은 분들은 여기까지만 …
![Page 34: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/34.jpg)
아름다운 JVM 세상Beautiful JVM World
![Page 35: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/35.jpg)
어라! 아무것도 없네요.
![Page 36: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/36.jpg)
아닙니다.숨은 공신들이 있습
니다.
![Page 37: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/37.jpg)
JVM 세상에는 각자 고유의 역할(Role)을 가지고 있는 객체가 있습니다.
![Page 38: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/38.jpg)
다시 한번…객체는 각자 고유의 역할(Role)이 있습니다.
![Page 39: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/39.jpg)
“창조주”로써 사람을 만들려고 했다면 사람답게 만들어야 하겠죠.
![Page 40: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/40.jpg)
좀더 자세히 설명하면?사람을 만들려면 머리, 몸통, 팔, 다리의 정확한 역할을 정의한다.
머리와 몸통이 하나가 아니면 사람이 아니다.
팔과 다리가 두개가 아니면 사람이 아니다.
![Page 41: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/41.jpg)
그림으로도 설명하면?
사람 괴물
![Page 42: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/42.jpg)
번외:우리는 OOP에서 사람(객체)을 사람답지 않게 생성합니다.
안그러십니까?
![Page 43: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/43.jpg)
다시 숨은 공신을 소개합니다.
![Page 44: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/44.jpg)
클래스로더(Classloader)Beautiful JVM World
Classloader
![Page 45: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/45.jpg)
좀더 자세히 설명하면?
클래스로더(Classloader)
역할 : JVM 입구에서 클래스들을 로딩한다.
JVM 세상의 수문장 역할
![Page 46: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/46.jpg)
그림으로도 설명하면?Beautiful JVM World
Classloader
Class
ClassClass
Class Class
![Page 47: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/47.jpg)
로딩된 클래스는 객체화 될수 있습니다.
![Page 48: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/48.jpg)
좀더 자세히 설명하면?
Car a = new Car();
Car : 클래스
a : 객체
![Page 49: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/49.jpg)
그림으로도 설명하면?Beautiful JVM World
Classloader
Class
CarClass
Class Class
a
![Page 50: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/50.jpg)
객체를 여러개 생성하면
![Page 51: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/51.jpg)
좀더 자세히 설명하면?
Car a = new Car();
Car b = new Car();
House c = new House();
Food d = new Food();
![Page 52: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/52.jpg)
그림으로도 설명하면Beautiful JVM World
Classloader
Class
CarClass
Food House
ab
cd
![Page 53: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/53.jpg)
객체가 무한대로 많이 생성되면 어떻게
될까요?
![Page 54: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/54.jpg)
그림으로도 설명하면Beautiful JVM World
Classloader
Class
CarClass
Food House
ab
cd
Object
Object
Object
ObjectObject
Object
Object
Object Object
Object
ObjectObject
Object
Object
Object
Object
Object
![Page 55: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/55.jpg)
JVM 세상의 객체 밀도가 점점 높아집니
다.
![Page 56: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/56.jpg)
그러다가 …
![Page 57: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/57.jpg)
이렇게 되다가 …
![Page 58: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/58.jpg)
OOME(OutOf MemoryError)
![Page 59: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/59.jpg)
하지만 정상적인 상황에서는 OOME가 발생하지 않습니다.
![Page 60: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/60.jpg)
왜 그럴까요?
![Page 61: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/61.jpg)
또 하나의 숨은 공신을 소개합니다.
![Page 62: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/62.jpg)
Garbage CollectorBeautiful JVM World
Classloader
Class
CarClass
Food House
ab
cd
Object
Object
Object
Object
Object
Object Object
Object
ObjectObject
Object
Object
Object
Object
Object
finalize
finalize
finalize
finalize
finalize
finalize
finalize finalize
![Page 63: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/63.jpg)
좀더 자세히 설명하면?
Garbage Collection : 객체가 더 이상 참조가 없다고 판별(finalize)된 경우 Garbage Collector에 의해 호출됩니다.
즉 객체를 JVM 세상에서 소멸 시킵니다.
![Page 64: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/64.jpg)
그림으로도 설명하면?Beautiful JVM World
Classloader
Class
Class
Food Housed
Object
Object Object
Object
Object
ObjectObject
Object
Object
Object
finalizedCar
![Page 65: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/65.jpg)
WAS(Web Application Server) =
JVM 이란 생각은 해보셨나요?
![Page 66: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/66.jpg)
맞습니다.WAS도J2EE 스펙을 준수한 JVM입니다.
![Page 67: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/67.jpg)
그림으로도 설명하면?Beautiful JVM World
Classloader
AServletCar.jsp
FoodServlet House.jsp
ab
cd
BServlet
![Page 68: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/68.jpg)
JVM 세상은 항상 아름답기만 할까요?
![Page 69: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/69.jpg)
절대 아닙니다.
![Page 70: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/70.jpg)
조물주와 조물주의 친구분들은 불손한 클래스를 만들수있습니다.
![Page 71: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/71.jpg)
뭣도 모르고 만든 클래스가 최고의 불손한 클래스입니다.
![Page 72: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/72.jpg)
불손한 클래스의 의해 생성된 객체들이 JVM 세상을 반드시 어지럽게 합니다.
![Page 73: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/73.jpg)
어떻게 해결해야 하나요?
![Page 74: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/74.jpg)
프로파일링(Profiling)을 해야합니다.
![Page 75: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/75.jpg)
프로파일링을 하려면 클래스로더와 친해져
야 합니다.
![Page 76: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/76.jpg)
좀더 자세히 설명하면?우리는 클래스로더의 역할을 알고 있습니다.
클래스로더에 Hook Class를 적용합니다.
프로파일링 대상 클래스가 로딩될 때 낚아채어 측정 로직을 심어놓습니다.
프로파일 측정을 수행합니다. (ex:메소드 수행시간 측정)
프로파일링 대상 클래스는 자신에 몸속에 심어놓은 로직을 인지하지 못하고 평소와 동일하게 활동합니다.
![Page 77: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/77.jpg)
Hooking Class
![Page 78: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/78.jpg)
그림으로도 설명하면?Beautiful JVM World
Classloader
AServletCrazy.jsp
FoodServlet House.jsp
maddest-amaddest-b
cd
BServlet
hook Profiler
![Page 79: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/79.jpg)
불손한 클래스에서 생성된 객체는 호환, 전쟁, 마마보다도 무섭습니다.
![Page 80: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/80.jpg)
이 아름다운 JVM 세상에 Memory Leak, Infinite Loop의 암세포를 확산시킵니다.
![Page 81: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/81.jpg)
결국엔 아름다운 JVM 세상에 OutOfMemoryError,
Process of Hanging과 같은 종말을 가져다 줍니다.
![Page 82: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/82.jpg)
JVM 종말…
![Page 83: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/83.jpg)
그래서 프로파일링으로 원인 클래스 및 객체를 찾아제거해야 하는 것입니다.
![Page 84: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/84.jpg)
찾아서 반드시 제거하라~!
![Page 85: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/85.jpg)
프로파일링이 어려울것 같으시죠?
![Page 86: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/86.jpg)
APM (Application Performance Management) 솔루션을 구매하여 사용하
시면 간단합니다.
![Page 87: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/87.jpg)
무료로 하실려면 JDK에 포함된 JConsole이나 VisualVM을 사용하시면 됩니다.
![Page 88: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/88.jpg)
좀더 특화된 프로파일링을 원하시면 Java
Instrumentation 기법을 사용하여 구현하시면 됩니다.
![Page 89: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/89.jpg)
아름다운 JVM세상은 우리가 반드시 추구해야 되는 세상입니다.
![Page 90: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상](https://reader038.vdocuments.pub/reader038/viewer/2022102523/559b1c721a28ab3b128b47ad/html5/thumbnails/90.jpg)
이상 율이아빠였습니다.