stack是jvm的内存指令区。stack管理很简单,每次操作的数据或者是指令长度都是已知的。java指令代码(java方法),以及常量都保存在stack中。
heap是jvm的内存数据区。heap管理很复杂,每次分配不定长度的内存空间,专门用来保存对象的实例。在heap中分配一定的内存来保存对象实例,实际上也只是保存对象实例的属性值,属性类型和对象本身的类型标记符号。
对象在heap分配好内存后,需要在stack中保存一个4字节的heap的内存地址,用来定位对象实例在heap中的位置,便于找到该对象。
stack的内存管理是顺序分配的,而且不存在内存回收问题。
heap是jvm的内存数据区。heap管理很复杂,每次分配不定长度的内存空间,专门用来保存对象的实例。在heap中分配一定的内存来保存对象实例,实际上也只是保存对象实例的属性值,属性类型和对象本身的类型标记符号。
对象在heap分配好内存后,需要在stack中保存一个4字节的heap的内存地址,用来定位对象实例在heap中的位置,便于找到该对象。
stack的内存管理是顺序分配的,而且不存在内存回收问题。