Java平台的基本概念
• JVM,JRE,JDK
– JVM: Java Virtual Machine
• 负责执行符合Java规范的Class文件
• 不同厂家会有不同的实现,IBM J9, Sun Hotspot, JRockit, etc
– JRE: Java Runtime Environment
• 包括JVM和基础类库(常见的标准API,比如java.util.*, etc)。
一般来说基础类库是那些JCP大牛呕心沥血之作。但有些厂家
也会针对自己的硬件修改一部分基础类库的实现。最典型的是
IBM的JRE。
– JDK: Java Development Kit
• 包括JRE和开发/编译工具(javac, javadoc, etc)。
JVM运行时数据区域
• 程序计数器
• 本地方法栈
• Java虚拟机栈(JVM Stack)
– Java虚拟机栈描述的是Java方法的执行模型:
每个方法执行的时候都会创建一个帧(Frame)
栈用于存放局部变量表,操作栈,动态链接,
方法出口等信息。一个方法的执行过程,就是
这个方法对于帧栈的入栈出栈过程。
– 线程隔离
JVM运行时数据区域
• 堆 (Heap)
– 堆里存放的是对象的实例
– 是Java虚拟机管理内存中最大的一块
– GC主要的工作区域,为了高效的GC,会把堆细分更
多的子区域(后面有详细介绍)
– 线程共享
• 方法区域
– Hotspot JVM的永久代(Permanent Generation)
– 存放了每个Class的结构信息,包括常量池、字段描述、
方法描述
– GC的非主要工作区域
JVM运行时数据区域-例子
– 生成了2部分的内存区域,1)obj这个引用变量,因为
是方法内的变量,放到JVM Stack里面 2) 真正Object
class的实例对象,放到Heap里面
– 上述的new语句一共消耗12个bytes,JVM规定引用占4
个bytes(在JVM Stack),而空对象是8个bytes(在
Heap)
– 方法结束后,对应Stack中的变量马上回收,但是Heap
中的对象要等到GC来回收