Java Memory Model
2012-10-11 21:30
309 查看
在程序运行时,每运行一个Java程序会启动一个JVM(Java Virtual Machine)实例。JVM中存在很多线程,这些线程分为两种:daemon和non-daemon。例如,garbage collection线程就是daemon类型的。JVM会一直运行,直至所有non-daemon类型的线程结束。
注意:用户编写的程序,可以将其创建的线程标记为daemon类型的
Java的内存模型
JVM在运行程序时,会将内存划分成以下几个部分:method are(方法区)、heap(堆)、Java stacks(栈)、PC Register(程序计数器)和native method stacks(本地方法栈),如下图所示:
Method Area:JVM从class文件中加载类,并将这些类的信息进行解析,将解析的信息保存到Method Area中。Method Area中还包含一个运行时常量池(runtime constant pool)。在字节码文件中(class文件对应的byte code)有常量池(Constant Pool Table),用于存储编译器产生的字面量和符号引用。每个字节码文件中的常量池在类被加载后,都会存储到方法区中。值得注意的是,运行时产生的新常量也可以被放入常量池中,比如 String 类中的 intern() 方法产生的常量。
Heap: java类所有的实例(instance)都保存到heap中,即所有通过new产生的object都保存到heap上。
Java stacks: java stacks保存stack frames,没调用一个方法会在stack上产生一个新的frame,frame保存了局部变量、返回地址等不同信息。注意java程序运行过程中产生的中间结果也保存在stack当中。
Pc registers:程序计数器,存储着下一条指令的地址。
注意在这些内存区域当中有些是被所有线程所共享的,有些是线程私有的,其中Method area和heap为所有线程共享,其他三种每个线程都有自己独立的内存区域。
注意:用户编写的程序,可以将其创建的线程标记为daemon类型的
Java的内存模型
JVM在运行程序时,会将内存划分成以下几个部分:method are(方法区)、heap(堆)、Java stacks(栈)、PC Register(程序计数器)和native method stacks(本地方法栈),如下图所示:
Method Area:JVM从class文件中加载类,并将这些类的信息进行解析,将解析的信息保存到Method Area中。Method Area中还包含一个运行时常量池(runtime constant pool)。在字节码文件中(class文件对应的byte code)有常量池(Constant Pool Table),用于存储编译器产生的字面量和符号引用。每个字节码文件中的常量池在类被加载后,都会存储到方法区中。值得注意的是,运行时产生的新常量也可以被放入常量池中,比如 String 类中的 intern() 方法产生的常量。
Heap: java类所有的实例(instance)都保存到heap中,即所有通过new产生的object都保存到heap上。
Java stacks: java stacks保存stack frames,没调用一个方法会在stack上产生一个新的frame,frame保存了局部变量、返回地址等不同信息。注意java程序运行过程中产生的中间结果也保存在stack当中。
Pc registers:程序计数器,存储着下一条指令的地址。
注意在这些内存区域当中有些是被所有线程所共享的,有些是线程私有的,其中Method area和heap为所有线程共享,其他三种每个线程都有自己独立的内存区域。
相关文章推荐
- Java theory and practice: Fixing the Java Memory Model, Part 1
- java内存模型(Java Memory Model)
- Java Memory Model--学习小结
- Java 内存模型(Java Memory Model)
- java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解
- Java Memory Architecture (Model), Garbage Collection and Memory Leaks
- Java theory and practice: Fixing the Java Memory Model, Part 2
- RUNTIME DATA AREAS – JAVA’S MEMORY MODEL
- Memory space manipulating in Java(Section two:Process Memory Model on AIX part two-Default Memory Model)
- Java (JVM) Memory Model and Garbage Collection Monitoring Tuning
- Fixing the Java Memory Model, Part 1
- Java Memory Model基础
- The Java Memory Model
- [翻译]JSR 133 (Java Memory Model) FAQ
- 浅析java内存模型--JMM(Java Memory Model)
- Synchronization and the Java Memory Model
- java-memory-model
- Java Memory Model & multithread-programming
- Fixing the Java Memory Model, Part 2
- Synchronization and the Java Memory Model