#노마드코더 #북클럽 #노개북
전자책으로 참여 신청...!
#노마드코더 #북클럽 #노개북
전자책으로 참여 신청...!
`http:localhost:8888`은 안드로이드 디바이스의 localhost를 의미한다.
`http:10.0.2.2:8888/`
실제 내부 ip(ipv4)로 접속해야한다.
jupyterlab 설치 (0) | 2021.01.15 |
---|---|
Cygwin (0) | 2021.01.13 |
chrome 개발자 도구(developer tool) freeze/pause screen (debug/breakpoint) (0) | 2021.01.13 |
AOP(Aspect Oriented Programming) (0) | 2021.01.07 |
- jvm이 프로그램을 수행하기 위해 OS로부터 할당받는 메모리 영역
1. PC registers
2. Java Virtual Machine stacks
3. Native Method Stacks
4. Method Area,
5. Heap
---
1. PC registers
2. Java Virtual Machine stacks
3. Native Method Stacks
은 Thread 별로 생성되고
4. Method Area,
5. Heap
은 모든 Thread에 공유된다.
- Thread마다 하나씩 존재.
- Thread가 시작할 때 생성된다.
- Java Method를 수행하고 있다면, 현재 수행 중인 JVM instruction의 주소를 갖는다.
- Native Method(C언어 등)를 수행하고 있다면, undefined 상태이다.
- PC Registers에 저장되는 Instruction의 주소는 Native Pointer 또는 Method Bytecode의 시작점이다.
- Native Method는 platform dependent하므로 JVM을 거치지 않고 수행된다.
- Java에서는 Method를 Stack Frame이라는 단위로 관리한다.
- Stack Frame은 Method의 상태 정보를 저장한다.
- compile time에 크기가 결정된다.
(Method 내에서 사용하는 변수나 연산 관련 내용, 반환값의 Type이 이미 source code에서 결졍되기 때문에)
- 현재 실행되는 Stack Frame을 Current Frame이라 한다.
- 3 부분(Local Variable section, Operand Section, Fame Data Section)으로 구성된다.
1. Local Variable section
- Parameter, Local variable이 저장된다,
- index가 0부터 시작하는 array
- 0: this
- 사용되지 않는 local variable은 index가 없을 수도 있다.
- Primitive Type(원시 타입)은 고정된 크기가 할당되지만, Object는 (객체가 존재하는 Heap의 위치) Reference로 저장된다.
Object는 CPU연산을 통해 Heap에서 값을 얻어야하고, Instance 생성이 일어나기 때문에 Primitive Type이 성능 면에서 낫다.
- char, byte, short, boolean은 int로 저장되지만 jvm 구현 방식과 Java Virtual Machine Stacks의 저장형태에 따라 달라진다.
Heap 등에서는 원래 타입으로 복원된다. boolean은 jvm에서 직접 지원하지 않아 int로 취급된다.
- long과 double은 두 개의 entry를 차지한다.
- Class Method의 경우 Reference가 존재하지 않는다.
- 연산 공간
- 기본 스택과 동일하다.
- Constant Pool Resoultion 정보, Method가 정상 종료했을 때의 정보, Method가 비정상 종료했을 때의 Exception 정보가 들어있다,
- Constant Pool Resoultion: Constant pool의 Pointer 정보. Symbolic Reference를 jvm에서 접근할 수 있는 Direct Reference로 변경하는 것을 Resolution이라 한다. Class의 모든 Symbolic Referencesms Method Area의 Constant Pool에 저장되어있다.
- 상수, 다른 Class, Method, 특정 변수를 접근할 때, Class나 Interface에 대한 의존 관계를 확인할 때 Constant Pool을 참조한다.
- 자신을 호출한 Stack Frame의 Instruction Pointer가 들어있다. Method가 종료되면 이 값으로 PC register를 설정하고 Stack Frame을 빠져나간다. 반환값이 있다면 다음 Frame에 Push한다.
- Exception이 발생하는 경우를 위한 Excpetion 정보를 갖는다. (Exception Table의 Reference)
Exception이 발생하면, jvm은 catch 절에 해당하는 bytecode로 jump한다.
- Thread마다 존재
- Thread가 시작할 때 생성
- 다른 Thread에서 접근이 불가능하여 동시성 문제가 없다.
- Thread가 Java Method를 수행할 때마다, Stack Frame을 생성하여 Java Virtual Machine Stacks에 Push한다.
- Stack Trace나 Stack Dump를 얻어서 분석할 때, 나오는 정보가 Java Virtual Machine Stack의 Stack Frame 정보이다.
Stack Trace는 Stack Frame을 한 라인으로 표현한 것이다.
- Java 외의 언어로 작성된 프로그램, API toolkit을 Java에서 사용/호출하기 위해 JNI(Java Native Interface)라는 표준 규약을 제공한다.
- Native Method를 위한 Stack이다. 언어별로 생성된다. Native Code가 C라면, C Stack, Native Code가 C++이라면, C++ Stack이 생성된다.
- Native Method가 종료되면 Java Virtual Machine Stack에 새로운 Stack Frame이 생성되고 실행된다. Native Method를 호출한 Stack Frame으로 돌아가지 않는다.
- 가장 흔히 사용하는 Hotspot JVM이나 IBM JVM은 Java Virtual Machine Stack과 Native Method Stack을 구분하지 않는다. 모두 Native Stack으로 통합되어있다. 즉, JVM이 사용하는 Thread가 모두 Native Thread이다.
- 모든 Thread가 공유
- JVM이 시작할 때 생성. Garbage Collection의 대상
- Load된 Class/Interface(=Type)를 저장하는 논리적인 공간.
1. Type Information
- Package.class의 Full Qualified Name
2. Constant Pool
3. Field Information
4. Method Information
5. Class variables
6. Reference to class ClassLoader
- 다른 type을 참조할 때 동일한 ClassLoader를 사용한다.
7.Reference to Class class
- Type이 Loadehlaus java.lang.class의 instance가 하나 생성된다. 이 reference가 type 정보의 일부로 저장되어 class 이름이나 interface여부를 알 수 있다.
- Method에 대한 Direct Method를 갖는 자료구조
- Java Performance Fundamental(김한도 저)
book.naver.com/bookdb/book_detail.nhn?bid=6102334
- oracle: The Structure of the Java Virtual Machine
JVM internal - 0.Overview (0) | 2021.01.30 |
---|---|
what jit likes and dislikes (0) | 2021.01.17 |
jit optimization - 흥미로운 사실1 (0) | 2021.01.17 |
java 동작 원리 (0) | 2021.01.17 |
Java ME vs SE vs EE, JRE (0) | 2021.01.12 |
1. JVM은 Class Loader System을 통해 Class 파일을 JVM으로 로딩한다.
2. Class 파일은 Execution Engine을 통해 해석된다.
3. 해석된 프로그램은 Run-time Data Area에 배치되어 실질적으로 수행되는데,
4. 실행 과정에서 Thread Synchronization과 Garbage Collection 같은 관리작업이 일어난다.
출처 : Java Performance Fundamental(김한도 저)
jvm internal - 1. Runtime Data Area (0) | 2021.01.30 |
---|---|
what jit likes and dislikes (0) | 2021.01.17 |
jit optimization - 흥미로운 사실1 (0) | 2021.01.17 |
java 동작 원리 (0) | 2021.01.17 |
Java ME vs SE vs EE, JRE (0) | 2021.01.12 |
jit(and all compilers) are just complex pattern matchers
jvm internal - 1. Runtime Data Area (0) | 2021.01.30 |
---|---|
JVM internal - 0.Overview (0) | 2021.01.30 |
jit optimization - 흥미로운 사실1 (0) | 2021.01.17 |
java 동작 원리 (0) | 2021.01.17 |
Java ME vs SE vs EE, JRE (0) | 2021.01.12 |