Jvm的内存可以划分为5个区域
1.虚拟机栈(java virtual machine stacks), 一个方法的执行过程,就是一个栈帧进栈和出栈的过程,栈帧包含的信息包括:局部变量表,操作数栈,动态链接,方法出口信息等。
其中局部变量表中存放着基本数据类型,对象的引用,returnAddress类型等。
2.本地方法栈(native method stacks), 和虚拟机栈的作用类似,存放的是native的方法。
3.java堆(java heap), 堆是java回收器(gc)的主要工作区域,一般可以分为新生代和老年代,更细一点,可以分为eden空间, from survivor空间和to survivor空间。
4.方法区(method area), 方法区中存放着已被虚拟机加载的类信息,常量,静态变量,即时编译(Just in time, JIT)后的代码。
在sun的HotSpot中,一般把方法区称为永生代,实际上,应该说是sun用永生代实现了方法区
5.直接内存(direct memory), java使用native方法创建的堆外内存,如NIO。计算机管理员设置java的内存时,需要考虑到该部分的大小,否则容易被发oom.