This document discusses the structure and components of the Java Virtual Machine (JVM). It describes the key elements of the JVM including class files, bytecode, interpreters, memory areas like the Java stack, heap, and method area. It also discusses threads in the JVM, their states, and how thread dumps can be obtained. Garbage collection techniques like serial GC, parallel GC, CMS, and G1GC are covered. Out of memory errors and how to generate heap dumps are also summarized.
1 of 27
More Related Content
Inside the jvm
1. Inside the JVM
STRUCTURE OF JAVA VIRTUAL MACHINE
Development Center @ Pikicast.com
김병부 ( Benjamin )
3. 因果關係
: 인과관계
System Crash, Service Crash. Application Crash
서비스가 죽는 것은 항상 원인이 있습니다
시스템이 원인인지, 어플리케이션이 원인인지, 데이터 베이스가 원인인지
알아야 같은 현상을 막을 수 있습니다.
서비스는 한번에 죽지 않습니다. 서서히 죽어갈 뿐입니다.
4. List of JVM
List of JVM??
The Java Virtual Machine Specification
Hotspot JVM
Open JVM
IBM JVM
TinyVM
Dalvik JM ??
Stack Machine vs Register Machine
5. JVM
: Java Virtual Machine #1
Class File
Bytecode 의 집합
Interpreter / JIT Compiler
Java Stack
Heap
Thread 들이 공유하는 메모리 영역
Method Area
Thread 들이 공유하는 메모리 영역
Class 변수, 상수, Class 정보, Method 정보
9. Thread
:list of thread in the Hotspot JVM
Thread 종류
Non – Daemon Thread :
E.g. Thread, VM Thread
Daemon Thread :
Garbage Collector Thread, JMX Monitoring Thread
System Threads
VM thread
GC threads
Periodic task thread – timer events i.e. interrupts for schedule
Compiler thread – compiles byte code to native code in runtime
10. Thread
: Multi-Thread
Each thread has ..
Program Counter (PC)
Stack
Native stack
Stack Frame
Multi Thread – Context Switching & Scheduling
Thread-Safe
Keyword – synchronized
11. JVM Stack
JVM Stack per Thread!!!
Stack Frame per Method
Local Variable Array
Operand Stack
Reference to Constant Pool
12. Thread dump
: How to dump JVM Thread
jstack [pid] or kill –3 [pid]Thread Dump Date JVM Type, Mode
Thread name
Thread
Priority
Thread ID
Native
Thread ID
Thread STATUS
Thread STACK
info
15. JVM Memory Structure
: with JVM options
Basic Structure
Depends on GC options
Promotion
Minor GC vs Major GC
Young Generation
Old and Perm Generation
STW – Stop the world
From Java8,
No more PERM gen.
Metaspace (Native Heap)
16. What is difference between Method
Area and PERM GEN?
Actually the Method Area is a part of the PERM GEN
A third generation closely related to the tenured generation is the permanent generation.
The permanent generation is special because it holds data needed by the virtual machine
to describe objects that do not have an equivalence at the Java language level. For
example objects describing classes and methods are stored in the permanent generation.
23. OOME Case
: Out Of Memory Exception
java.lang.OutOfMemoryError : Java heap space
java.lang.OutOfMemoryError : PermGen space
java.lang.OutOfMemoryError : Request array size exceeds VM limit
25. Note
Dump 는 10초 간격으로 3번씩 뜬다.
Perm 영역에서도 OOM 이 발생할 수도 있다.
Hotspot JVM > Open JVM
Async Process 가 만능은 아님
MultiThread 도 Pool로 관리하자
Thread-safe and Pool Management
우리에겐 G1GC 가 가장 맞는 케이스
Throughput based tuning
Response time based tuning
Java byte code is interpreted however this is not as fast as directly executing native code on the JVM’s host CPU. To improve performance the Oracle Hotspot VM looks for “hot” areas of byte code that are executed regularly and compiles these to native code. The native code is then stored in the code cache in non-heap memory. In this way the Hotspot VM tries to choose the most appropriate way to trade-off the extra time it takes to compile code verses the extra time it take to execute interpreted code.
데몬 스레드는 다른 비데몬 스레드가 없다면 동작을 중지한다. 사용자가 직접 스레드를 생성하지 않더라도, Java 애플리케이션이 기본적으로 여러 개의 스레드를 생성한다. 대부분이 데몬 스레드인데 가비지 컬렉션이나, JMX 등의 작업을 처리하기 위한 것이다. 'static void main(String[] args)' 메서드가 실행되는 스레드는 비데몬 스레드로 생성되고, 이 스레드가 동작을 중지하면 다른 데몬 스레드도 같이 동작을 중지하게 되는 것이다. 이 main 메서드가 실행되는 스레드를 HotSpot VM에서는 VM Thread라고 부른다.
Each frame contains:
- Local variable array
- Return value
- Operand stack
Reference to runtime constant pool for class of the current method
Program counter – CPU 명령어 포인터
Reference to Constant Pool :
각 클래스와 인터페이스의 상수뿐만 아니라, 메서드와 필드에 대한 모든 레퍼런스까지 담고 있는 테이블이다.
즉, 어떤 메서드나 필드를 참조할 때 JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리상 주소를 찾아서 참조한다.