1,寄存器
这是最快的储存区,因为它位于不同于其它储存区的地方------处理器内部,但是寄存器的数量极其有限,所以寄存器根据需求进行分配;你不能直接对他进行控制,又不能在程序中感觉到寄存器的存在的任何迹象
2,栈
位于通用的RAM(随机访问存储器)中,但通过栈指针可以获取处理器的直接支持,指针若向下移动,则分配新的内存;若向上移动,则释放内存;这是一种快速有效的分配存储方法,仅次于寄存器;创建程序时,java系统必须知道存储在栈内所以项的确切生命周期,一边上下移动指针,这一约束限制了程序的灵活性,所以虽然某些java数据存储在栈里-------特别是对象引用,但是java对象并不存储在其中。
3.堆
一种通用内存池(也位于RAM区),用于存放所有的Java对象.对不同于栈的区别是:编译器不需要知道存储的数据在堆里存活多长时间.因此在堆里分配存储有很大的灵活性.当需要一个对象时,只需要用new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配.当然,为这种灵活性必须付出相应的代价:用对进行存储分配和清理可能会比用栈需要更多的时间.
4.常量存储
常量值通常直接放在程序代码中,这样做是安全的,因为它永远不会被改变.
5.非RAM存储
如果数据完全活动与程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在.其中基本的两个是流对象和持久化对象
转载于:https://blog.51cto.com/lovely1133/1226259