It is just my opinion, so don't you attack me. please!
But if this posting has some incorrect informations, you comment about that
Please!!
What is JVM?
- Where is JVM?
·JVM
은Application program(응용프로그램)
과OS
사이 존재하게 되며, 하는 일은Java byte code
를 해석하고 실행하는 것이다. 그렇다면JVM
은 언제 설치 되는가?eclipse
나intellij
로Java
를 실행하기 위해 우리는JDK
가 필요하다는 것을JVM
이 궁금한 사람이라면 당연히 알고 있을 것이다.
·JVM
은JRE(Java Runtime Environment)
라는 소프트웨어 패키지에 Java Class library와 함께 구현되어 있다. 또한ORACLE
은 이 JRE를Hotspot
이라 부르며 배포하고 있다.
· 그리고 이JRE
의 Superset(상위 집합)이 바로JDK(Java Development Kit)
인 것이다. 이JDK
에는 Java 프로그래머를 위한 여러가지 툴이 있으며, 가장 중요한javac
라는 compiler를 포함하고 있다.
· OS 위에 바로 응용프로그램을 올리지 않고,virtual machine
을 올리고 이후에 응용프로그램을 올리는 것일까?virtual machine
을 사용하면서 생긴 장단점이 있다.
우선 단점은Java byte code
를JVM
이 기계어로 해석을 해줘야OS
에서 받아들일 수 있기 때문에, 해석에 대한 추가적인 시간이 걸리게된다. 또한System call
이 발생할 때도 시간이 걸리는데,JVM language Stack
에서 수행을 하고 있다가System call
이 필요한 순간이 오면,현재 stack
에서Native method stack
으로 분기하게 된다. 이후OS
에System call
을 하고, 다시 돌아와서 수행을 하는 방식이다. 따라서C/C++
에서 표준 라이브러리로System call
을 하는 방식보다 느릴 수 밖에 없다.
VM
을 사용하면서 얻을 수 있는 장점은 무엇일까?C/C++
의 경우는 플랫폼에 따라int
형의 크기가 변한다. 이런 상황에서 JAVA에서 현재는 그 목적이 흐려졌지만,VM
을 사용하는 목적은WORA(Write Once Run Anywhere)
즉,H/W
나OS
에 영향을 받지 않고Java byte code
를 정확하게 수행하게 되는 것을 지향하기 위해서이다.
하지만 상대적으로 느리다는 단점은JIT(Just In Time)
컴파일러를 구현해 단점을 극복해 냈고,VM
을 사용한 장점을 살린 JAVA는 프로그램의 이식성을 높일 수 있도록 해주고, 유지보수에 들어가는 비용을 줄이거나 없앨 수 있을 것이다. - Structure of the JVM
· Class loader
JDK
의javac(compiler)
가source.java
을 컴파일 하여java byte code
로 된source.class
를 만든다. 그리고 이source.class
를Runtime data area(memory allocated by JVM)
으로 로드하는 역할은Class loader
가 맡게 된다. (class loader에 대해서는 나중에 더 자세하게 포스팅 하도록 하겠습니다.)
· Runtime data
JVM
이 프로그램을 수행하기 위해서OS
로부터 별도로 할당 받은 공간이다.Heap
과Method area(+ runtime constant pool)
은 프로그램이 구동되면서 생긴thread
모두가 공유하는 공간이고, 나머지JVM stack
,PC register
,Native Method
stack
은 thread 별로 공간을 할당 받는다.
· PC register
OS의 PC register와 같은 기능으로 다음JVM
명령
에 대한 주소를 가지고 있다.
· JVM stack
thread에서 사용하는 stack으로stack frame
을POP
하거나PUSH
한다. (JVM stack에 대해서도 더 자세하게 포스팅하도록 하겠습니다.)
· Native Method Stack
JNI(Java Native Interface)
를 통해 호출하는C/C++
등의 코드를 수행하기 위한 스택으로, 언어에 맞게C stack
이나C++ stack
이 생성된다. 또한System call
을 할 때에도 이 곳을 거치게 된다.
· Method(class) Area
이 영역은 논리적으로는Heap의 일부
지만, 모든 thread가 공유하는 공간으로run-time constant pool
,field
,메소드 data
,메소드에 대한 코드
와생성자
, 클래스에서 초기화 및 인터페이스 초기화에 사용되는특별한 메소드
들을 저장합니다.
· Heap
thread 간에 공유되는 영역으로서heap
은 모든class instance
및array에 대한 메모리
가 할당되는run-time data area
이다. 또한JVM
성능 이슈에 가장 많이 언급되며,Garbage collection
의 대상이 되는 곳이다.
Congratulations @lineplus! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of posts published
Award for the number of upvotes received
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last announcement from @steemitboard!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit