堆:先进先出,存放在二级缓存中,速度慢,只有一个,被所有线程共享,用来存放对象和数组,可以动态分配内存大小,生命周期不确定。(灵活、速度慢)
栈:后进先出,存放在一级缓存中,速度快,每个线程都包含一个栈区,数据私有,其他栈不能访问,用来执行程序,不能动态分配内存,生命周期确定。(速度快、不灵活)
方法区/静态区:被所有线程共享,存放所有的方法和静态变量,全局变量与静态变量放一起,初始化与未初始化的分开。
栈的组成:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)
为什么要有堆和栈?这样设计有什么好处?
①Java自动管理堆和栈,程序员不能直接地设置栈和堆。
②Java的堆是一个运行时数据区。堆是由JVM的垃圾回收器自动管理的。堆的优势是可以在程序运行时,动态地分配内存
大小,但是正是由于这个原因,它的存取速度较慢。
③栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小和生存期是必须确定的,缺乏灵活性。
网友评论