What is JVM in JAVA?

in jvm •  6 years ago 

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?

    · JVMApplication program(응용프로그램)OS사이 존재하게 되며, 하는 일은 Java byte code를 해석하고 실행하는 것이다. 그렇다면 JVM은 언제 설치 되는가? eclipseintellijJava를 실행하기 위해 우리는 JDK가 필요하다는 것을 JVM이 궁금한 사람이라면 당연히 알고 있을 것이다.

    · JVMJRE(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 codeJVM이 기계어로 해석을 해줘야 OS에서 받아들일 수 있기 때문에, 해석에 대한 추가적인 시간이 걸리게된다. 또한 System call이 발생할 때도 시간이 걸리는데, JVM language Stack에서 수행을 하고 있다가 System call이 필요한 순간이 오면, 현재 stack에서 Native method stack으로 분기하게 된다. 이후 OSSystem call을 하고, 다시 돌아와서 수행을 하는 방식이다. 따라서 C/C++에서 표준 라이브러리로 System call을 하는 방식보다 느릴 수 밖에 없다.

    VM을 사용하면서 얻을 수 있는 장점은 무엇일까? C/C++ 의 경우는 플랫폼에 따라 int 형의 크기가 변한다. 이런 상황에서 JAVA에서 현재는 그 목적이 흐려졌지만, VM을 사용하는 목적은 WORA(Write Once Run Anywhere) 즉, H/WOS에 영향을 받지 않고 Java byte code를 정확하게 수행하게 되는 것을 지향하기 위해서이다.

    하지만 상대적으로 느리다는 단점은 JIT(Just In Time)컴파일러를 구현해 단점을 극복해 냈고, VM을 사용한 장점을 살린 JAVA는 프로그램의 이식성을 높일 수 있도록 해주고, 유지보수에 들어가는 비용을 줄이거나 없앨 수 있을 것이다.

  • Structure of the JVM

    · Class loader
    JDKjavac(compiler)source.java을 컴파일 하여 java byte code로 된 source.class를 만든다. 그리고 이 source.classRuntime data area(memory allocated by JVM)으로 로드하는 역할은 Class loader가 맡게 된다. (class loader에 대해서는 나중에 더 자세하게 포스팅 하도록 하겠습니다.)
    · Runtime data
    JVM이 프로그램을 수행하기 위해서 OS로부터 별도로 할당 받은 공간이다. HeapMethod area(+ runtime constant pool)은 프로그램이 구동되면서 생긴 thread 모두가 공유하는 공간이고, 나머지 JVM stack, PC register, Native Method stack은 thread 별로 공간을 할당 받는다.

    · PC register
    OS의 PC register와 같은 기능으로 다음 JVM 명령에 대한 주소를 가지고 있다.

    · JVM stack
    thread에서 사용하는 stack으로 stack framePOP하거나 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 instancearray에 대한 메모리가 할당되는 run-time data area이다. 또한 JVM 성능 이슈에 가장 많이 언급되며, Garbage collection의 대상이 되는 곳이다.
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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

Upvote this notification to help all Steemit users. Learn why here!

Do not miss the last announcement from @steemitboard!