我们从编写的程序入手,先了解Java程序有哪些东西需要在内存中存放,有了这一了解之后,我们再看Java内存区域的划分就容易一些。
一、我们编写的Java程序,JVM启动后,在内存中的类目清单
首先Java程序执行离不开class文件,我们所写的每一个类或者接口,编译之后都是.class文件。
在写一个java程序,我们通常所见的条目有类(或者接口)、变量、对象、方法。这些条目在内存中如何存放,是本篇文章想尝试说清的。
1、class文件包含的信息
包含类的版本等描述信息以及字段、方法、接口、常量池,具体内容如下ClassFile所示,对应jvms8
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count]; //类变量及实例变量
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];