- JVMabstract machine:platform dependent
- JVMfunction:1 load codes;2verify codes(strictly typed)--compile error; 3excute the codes;4provide runtime environment
- runtime environment:actual implementation of JVM, JVM is in jre(physically present), jre contains libraries and other files JVM uses.
- JDK contains JRE+development tools(like javac),also physically present
class loader + runtime data areas + excution engine
- class loader{load + link + initialize}
- load{ bootstrap class loader<- extension class loader<-application class loader,查找.class文件顺序 }
- 通常class file not found
- load from .class or .jar file which contains .class file
- loader implement不同则接收不同data source
- bootstrap class loader: load rt.jar
- extension class loader:load form jre/lib/ext folder
- application class loader:load from CLASSPATH -cp
- CLASSPATH and settings
- .class重名 ,-cp 选择在CLASSPATH中第一个出现的.class文件
- 而-Xmx设置则选择后者 java -Xmx128m -Xmx256m Hello.class
- jinfo -flag MaxHeapSize pid 查看
- link{verify + prepare +resolve}
- verify byte codes
- memory allocation for class vars to default value
- resolve: all symbolic references inside the current class(references to其他classes 或 to values constants pool)
- resolve通常产生class def not found,即class文件中所有对其他class 或methods的引用not found
- static block
- set values for static vars(vars to initalized value)
Method + Heap + Java Stacks + PC registers +Native method Stacks
- stored metadata corresponding to class(reflectionAPI所为即访问这里的metadata数据)
- 比如static var ,constants pool等class level的data 分配给JVM的内存,-XX:MaxPermSize 默认值64MB
- 内存不够 java.lang.OutOfMemoryError:PermGen space...
- !!java8 中为meta space并且没有限制 将PermGen space移到了native os的一个分开的内存
- object data, 每一次new 或arrys等
- -Xms -Xmx 最小最大的内存 分配
- 对每个thread有一个program counter
- counter则是指向下一instruction的指针
- stack
- 每个thread 有一个stack
- 将thread的不同methods push到stack中
- 如m1 call m2那么将在m1基础上push m2到stack中,return则将m2 pop out
- 数据如 parameters , parameter array,local vars, return values, operant stack(暂存区进行操作)
- java.lang.StackOverflowError -Xss
- 如 call .dll /.so文件在本地 lib
每个JVM只有一个method area和heap,但thread级是stack,如果彼此不交互则threadsafe
{interpreter + JIT compiler+hostspot profiler+garbage collector}
- interpret the current bytecode instruction
- Just-In-Time compiler &hotsot profiler
- 对于重复的指令则不再重复用interpreter而是保存起来
- hotsot 根据interpreter行为特点的观察,发现不断地重复执行相同指令,让JIT compiler保存
- clean up unused calsses objects and memory areas
- JNI java native interface (medium for java method calls for native methods . provide info about native library to JVM
JVM(essential)
原文:http://www.cnblogs.com/yumanman/p/7612454.html