1、栈stack位于通用RAM(random-access memory,随机访问存储器)中,但通过它的“堆栈指针”可以从处理器哪里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动指针。这一约束限制了程序的灵活性。所以虽然某些Java数据存储于堆栈中-特别是对象的引用,但是java对象并不存储于堆栈中。
2.堆heap:一种通用性的内存池(也存在于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活的时间。因此在堆里分配存储有很大的灵活性。当你需要创建一个对象时,只需要用new写一行简单地代码,当执行这段代码时,会自动在堆里进行存储分配。
3.java中的基本类型存储于堆栈中,基本类型具有的包装器类,是你可以在堆中创建一个非基本对象,用来表示对应的非基本类型。
例如:
char c ="x";
Character cc = new Character(c);