주니어 개발자도 이해 할 수 있는 아름다운 jvm 세상

Post on 07-Jul-2015

4.997 Views

Category:

Software

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

Bueatiful JVM World

TRANSCRIPT

주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

2014. 11Darion Kim

나는 누구?Darion Kim (김헌기)

디에스멘토링 연구소 수석보

자칭 통신(통합의 신, God of Integration)

hnki0104@me.com

https://www.facebook.com/groups/serverside (율이아빠)

이 문서를 모든 Freshman에게 바칩니다.

(for YMS, JHJ)

이미 JVM에 대해서 아시거나 시니어 개발자분들은 여기까지만 …

약속드립니다.절대 어렵게 얘기하지 않겠습니다.

아름다운 JVM 세상을 만나 볼 준비가 되

셨습니까?

사람들은 JVM을 뭐라고 얘기할까요?

JVM=

Java Virtual Machine

그 다음부터는 무진장 어렵게 얘기하더라구요. ㅠㅠ

저는 어떻게 얘기할까요?

혹시 프로그램(Program) 은 아세요?

프로그램을 실행하면 프로세스(Process)가 생성됩니다.

좀더 자세히 설명하면?

디스크(Disk)에 있는 프로그램 파일(File)을 실행한다.

프로그램 파일이 메모리(Memory) 적재되면서 프로세스화 되어 프로세서(CPU)를 사용한다.

그림으로도 그려볼까요?

DiskProgram.exe Loading

Memory

CPU

Process

Process는 Disk, File, Memory, CPU와 관련되어 있네요.

기억해두세요.

JVM=

Process이라고 가정한다면

JVM도 Process 처럼 실행할수 있겠네요.

에이~ 다들 아시면서… ^^

java -cp 라이브러리 메인클래스

좀더 자세히 설명하면?디스크에 있는 java 프로그램에 메인클래스를 지정하여 실행한다.

-cp 옵션을 주어 라이브러리도 지정하여 실행한다.

라이브러리는 디렉토리, *.jar, *.zip 파일 절대경로이다.

Disk

그림으로도 그려볼까요?

java

Loading

Memory

CPU

JVM

Main.class Main

LibraryLibrary

JVM도 Process 맞네요.

끝까지 아니라고 하시는 분들은 여기까

지만 …

자~ 그러면 좀더 심도있게 들어가 볼까요?

JVM 안쪽에서는 어떤일들이 벌어질까

요?

그럼 우선 Creator와 Class와 Object, Instance의 차이를 알아야 합니다.

좀더 자세히 설명하면?Creator = 조물주, 바로 여러분 입니다.

Class(*.class)는 조물주가 만든 뼈대입니다.

Class는 Object화 됩니다. = Instance

그말은 뼈대에 생명력을 불어넣으면 객체가 됩니다.

그림으로도 그려볼까요?

Class Object Instance

Creator

자~ 다시 Class, Object를 기억해주세요.

이제 정말로 아름다운 JVM 세상으로 들어갑니다. ^^

아름다운 JVM 세상을 추상적으로 그려

봅니다.

중요한 것은 쉽게 그립니다.

정확한 기술 스펙이 보고 싶은 분들은 여기까지만 …

아름다운 JVM 세상Beautiful JVM World

어라! 아무것도 없네요.

아닙니다.숨은 공신들이 있습

니다.

JVM 세상에는 각자 고유의 역할(Role)을 가지고 있는 객체가 있습니다.

다시 한번…객체는 각자 고유의 역할(Role)이 있습니다.

“창조주”로써 사람을 만들려고 했다면 사람답게 만들어야 하겠죠.

좀더 자세히 설명하면?사람을 만들려면 머리, 몸통, 팔, 다리의 정확한 역할을 정의한다.

머리와 몸통이 하나가 아니면 사람이 아니다.

팔과 다리가 두개가 아니면 사람이 아니다.

그림으로도 설명하면?

사람 괴물

번외:우리는 OOP에서 사람(객체)을 사람답지 않게 생성합니다.

안그러십니까?

다시 숨은 공신을 소개합니다.

클래스로더(Classloader)Beautiful JVM World

Classloader

좀더 자세히 설명하면?

클래스로더(Classloader)

역할 : JVM 입구에서 클래스들을 로딩한다.

JVM 세상의 수문장 역할

그림으로도 설명하면?Beautiful JVM World

Classloader

Class

ClassClass

Class Class

로딩된 클래스는 객체화 될수 있습니다.

좀더 자세히 설명하면?

Car a = new Car();

Car : 클래스

a : 객체

그림으로도 설명하면?Beautiful JVM World

Classloader

Class

CarClass

Class Class

a

객체를 여러개 생성하면

좀더 자세히 설명하면?

Car a = new Car();

Car b = new Car();

House c = new House();

Food d = new Food();

그림으로도 설명하면Beautiful JVM World

Classloader

Class

CarClass

Food House

ab

cd

객체가 무한대로 많이 생성되면 어떻게

될까요?

그림으로도 설명하면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

JVM 세상의 객체 밀도가 점점 높아집니

다.

그러다가 …

이렇게 되다가 …

OOME(OutOf MemoryError)

하지만 정상적인 상황에서는 OOME가 발생하지 않습니다.

왜 그럴까요?

또 하나의 숨은 공신을 소개합니다.

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

좀더 자세히 설명하면?

Garbage Collection : 객체가 더 이상 참조가 없다고 판별(finalize)된 경우 Garbage Collector에 의해 호출됩니다.

즉 객체를 JVM 세상에서 소멸 시킵니다.

그림으로도 설명하면?Beautiful JVM World

Classloader

Class

Class

Food Housed

Object

Object Object

Object

Object

ObjectObject

Object

Object

Object

finalizedCar

WAS(Web Application Server) =

JVM 이란 생각은 해보셨나요?

맞습니다.WAS도J2EE 스펙을 준수한 JVM입니다.

그림으로도 설명하면?Beautiful JVM World

Classloader

AServletCar.jsp

FoodServlet House.jsp

ab

cd

BServlet

JVM 세상은 항상 아름답기만 할까요?

절대 아닙니다.

조물주와 조물주의 친구분들은 불손한 클래스를 만들수있습니다.

뭣도 모르고 만든 클래스가 최고의 불손한 클래스입니다.

불손한 클래스의 의해 생성된 객체들이 JVM 세상을 반드시 어지럽게 합니다.

어떻게 해결해야 하나요?

프로파일링(Profiling)을 해야합니다.

프로파일링을 하려면 클래스로더와 친해져

야 합니다.

좀더 자세히 설명하면?우리는 클래스로더의 역할을 알고 있습니다.

클래스로더에 Hook Class를 적용합니다.

프로파일링 대상 클래스가 로딩될 때 낚아채어 측정 로직을 심어놓습니다.

프로파일 측정을 수행합니다. (ex:메소드 수행시간 측정)

프로파일링 대상 클래스는 자신에 몸속에 심어놓은 로직을 인지하지 못하고 평소와 동일하게 활동합니다.

Hooking Class

그림으로도 설명하면?Beautiful JVM World

Classloader

AServletCrazy.jsp

FoodServlet House.jsp

maddest-amaddest-b

cd

BServlet

hook Profiler

불손한 클래스에서 생성된 객체는 호환, 전쟁, 마마보다도 무섭습니다.

이 아름다운 JVM 세상에 Memory Leak, Infinite Loop의 암세포를 확산시킵니다.

결국엔 아름다운 JVM 세상에 OutOfMemoryError,

Process of Hanging과 같은 종말을 가져다 줍니다.

JVM 종말…

그래서 프로파일링으로 원인 클래스 및 객체를 찾아제거해야 하는 것입니다.

찾아서 반드시 제거하라~!

프로파일링이 어려울것 같으시죠?

APM (Application Performance Management) 솔루션을 구매하여 사용하

시면 간단합니다.

무료로 하실려면 JDK에 포함된 JConsole이나 VisualVM을 사용하시면 됩니다.

좀더 특화된 프로파일링을 원하시면 Java

Instrumentation 기법을 사용하여 구현하시면 됩니다.

아름다운 JVM세상은 우리가 반드시 추구해야 되는 세상입니다.

이상 율이아빠였습니다.

top related