엑셈에서 유료로 진행되는 Java Performance Fundamental 교재를 공유하기로 하였습니다. 세미나에 참석하셨던 분들의 요청이 가장 큰 동기였습니다. 그러나 책을 출간하고 나서 책의 내용을 요약하여 포스팅하는 작업이 계속 밀리더라구요. 요즘 관심사가 좀 다른데 있어서 말입니다. 그래서 PDF로 공유하는 것보다 PT도 가능한 형태로 공유하기 위해 이러한 방식을 사용하였습니다. 이 교재 내용은 제가 쓴 Java Performance Fu..
Hotspot JVM, 다시말해 Sun사에서 만들어 HP, Solaris, Windows, Linux, Mac 등에서 사용하는 JVM은 Garbage Collector를 추가하는 방식으로 Garbage Collection이 개선되어 왔다. 다시말해 버전이 올라가면서 기존의 Garbage Collector 보다 더 나은 알고리즘을 가진 Garbage Collector를 추가하여 제공하는 방식으로 진화해왔다는 것이다. 그러므로 Hotspot JVM에서는..
Sun, HP, Windows, Linux에서 사용되는 Hotspot JVM은 Young Generation과 Old Generation으로 나뉘는 Generational Heap을 가진다고 하였다. 이 Hotspot JVM의 Garbage Collection에는 하나의 가설이 뒤를 든든히 받치고 있다. 그것은 바로 Weak Generational Hypothsis이다. 내용은 두 가지로 구성되어 있다. 첫째. High Infant Mortalit..
Hotspot JVM이란 Hotspot Compiler를 사용하는 Sun, HP, Oracle에서 배포하는 JVM을 말한다. 이 Hotspot JVM의 Heap Object Layout은 왼편의 그림과 같다. Heap에는 Object와 Array만이 존재하는데 Hotspot JVM의 경우 Object는 Header가 2개, Array에는 Header가 3개 존재한다. Array도 사실은 Object의 Layout에 Array Size를 알려주는 He..
IBM JVM의 Heap은 Java5에 와서 그 구조가 달라지기 시작하였다. Java 1.4.2 버전까지는 One-Heap 구조로 고수하다가 Java 5에서는 Hotspot JVM 처럼 Generational Heap 구조를 사용할 수 있게 되었다. One Heap구조는 아래의 그림과 같이 구성되어 있다. Heapbase라고 하는 Heap의 처음 주소에서부터 Heaptop 까지 확장이 가능하며 가변크기일 경우 현재까지 할당된 부분을 He..
Hotspot JVM은 Generational Heap으로 되어 있다. Heap은 Young Generation과 Old Generation으로 되어 있으며 Young Generation은 Eden 영역과 Survivor 영역으로 구성되어 있다. Eden 영역은 Object가 처음으로 할당되는 장소이며 Eden이 꽉 차게 되면 Live Object만 골라 Survivor 영역으로 복사하게 된다. 이를 Minor Garbage Col..
Java Heap은 Instance또는 Java Object나 Array가 저장되는 공간으로 모든 Thread들에 의해 공유된다. 그렇기 때문에 동기화 문제도 발생할 수도 있는 공간이기도 하다. Heap도 JVM이 기동할 때 같이 생성된다. JVM는 Heap에 메모리를 할당하는 instruction만 존재한다. Bytecode로는 new, newarray, anewarray, multianewarray만이 존재한다. 그리고 메모리 해제를 위한 명..
Java Method를 Call할 때 Thread의 Java Stack에 새로운 Stack Frame을 생성하여 Push하는 것처럼 Native Method를 Call하게 되면 Java Stack에서 Native Method Stack영역으로 나와서 직접 Native Method를 수행 이는 Java Stack에서 Dynamic Link를 통해 Native 까지 확장하는 것으로 볼 수 있음. 만약 JNI를 사용하고 있고 이것이 C로 구현이 되어 있다..
Method Area는 Reference시 빈번하게 접근되는 곳이므로 원하는 정보를 찾는 속도가 중요한 이슈가 될 수 있다. Class의 Method들에 대한 direct reference를 갖는 자료구조이며 Method 호출을 위한 데이터 구조이다. 이를 사용하게 되면 Method 참조를 빠르게 수행할 수 있게 된다. Type중 interface나 abstract class가 아닌 class에서 존재하며 해당 Class의 Method뿐만이 아니..
Class Loader에 의해 Load된 모든 Class의 메타 정보를 저장하는 메모리 공간으로 모든 Thread들에 의해 공유된다. Method Area는 JVM 이 시작할 때 생성된다. Method Area의 구현도 역시 JVM 벤더가 알아서 하게 되어 있다. Sun JVM에서는 이 Method Area를 Permanent Area라는 명칭을 가진 특정 메모리 영역으로 구현하고 있고 IBM JVM의 경우 별도의 영역 구분 없이 Heap내에..
Java virtual Machine Stacks는 Thread의 수행정보를 기록하는 Stack Frame을 저장하고 있는 영역이다. Java virtual Machine Stacks도 Thread 별로 한 개씩 존재하며 Thread와 함께 생성된다. Java Virtual Machine Stacks는 Thread의 배타적인 영역으로 서로 공유되지 않는다. Java Virtual Machine Stacks은 각각 분리된 Stack Fram..
Program Counter라고도 불리는 PC register는 각 Thread마다 하나씩 존재한다. 이것은 Thread가 생성될 때 같이 생성되며 Native Pointer와 Return Address를 가지고 있다. Thread가 Java Method를 수행할 때 현재 수행되고 있는 Instruction의 주소를 포함하고 있다. 이 Instruction의 주소는 Native Pointer일 수도 있고 Method Bytecode의 시작 o..
Oracle 성능을 하다가 Java 성능으로 영역을 확장하면서 힘들었던 것은 무엇을 공부해야 할지를 정하는 것이었다. Java라는 것이 용어부터 너무도 많고 기술도 너무 많았기 때문에 이것 저것 하다보면 남는 것도 없이 분주하기만 할 뿐이었다. WAS 벤더들의 교육을 찾아 다녀도 마찬가지였다. 자신들의 WAS에 특화된 부분에 대해서 얘기를 듣다보면 성능 문제를 일으키는 근본적인 요소들에 대해서는 잘 파악이 되지 않았던 것이다. 그래서 마늘과 쑥을..
Class loader는 각각 자신만의 namespace가 있다. 이렇게 Type의 이름은 Instance level에서 unique한 것이 아니기 때문에 Java Application에서 정확하게 같은 이름을 지닌 여러 type을 load할 수 있다. 만약 같은 이름의 type이 다른 namespace에 여러 개 load되어 있을 때 class loader 는 적어도 자신이 load하는 type을 구별할 필요가 있다. Namespace는 cla..
- Total
- 371,409
- Today
- 28
- Yesterday
- 61
- bigdata
- jvm
- 빅데이터
- 앱스토어
- hotspot
- 애플
- 페이스북
- Web2.0
- Splunk
- Apple
- iPad
- 아이패드
- 구글
- garbage collection
- 소셜네트워크
- 안드로이드
- 전자책
- SNS
- runtime data areas
- iPhone
- 스티브잡스
- 스마트폰
- jvm internal
- 아이폰
- ebook
- 트위터
- 소셜네트워크서비스