What is JVM in JAVA?
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 Methodstack은 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) :
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
STOPDo not miss the last announcement from @steemitboard!