做个java程序员n多年了,一直以来没搞明白jvm的内存分配。静下心来琢磨下。
下面的内容全部来自网络,基本无原创。只是学习笔记而已。
1 JVM整体架构
JVM specification中的JVM整体架构。
如下图
主要包括两个子系统和两个组件: Class loader(类装载器) 子系统,Execution engine(执行引擎) 子系统;Runtime data area (运行时数据区域)组件, Native interface(本地接口)组件。
1.1 Class loader子系统的作用 :
根据给定的全限定名类名(如 java.lang.Object)来装载class文件的内容到 Runtime data area中的method area(方法区域)。Javsa程序员可以extends java.lang.ClassLoader类来写自己的Class loader。
1.2 Execution engine子系统的作用 :
执行classes中的指令。任何JVM specification实现(JDK)的核心是Execution engine, 换句话说:Sun 的JDK 和IBM的JDK好坏主要取决于他们各自实现的Execution engine的好坏。每个运行中的线程都有一个Execution engine的实例。
1.3 Native interface组件 :
与native libraries交互,是其它编程语言交互的接口。
1.4 Runtime data area 组件:
这个组件就是JVM中的内存。 下面对这个部分进行详细介绍。