在java中,内存可以分为三个部分:栈空间(stack),堆空间(cheap),以及方法区内存。
栈空间:
1.栈空间是操作系统在建立某个进程或者线程,为了这个线程建立的存储区域,在编译的时候可以指定栈的大小。
2.栈空间里的元素有一个特性,最后放进去的元素最先拿出来(后近先出)。
3.栈空间保存的是函数调用时需要的信息:参数,局部变量,返回地址以及其他数据。
堆空间:
1.堆是一种数据结构,堆控制的属于自己的空间称为堆空间。
2.堆是在程序运行时请求操作系统分配内存。
3.在主函数调用函数时会把参数按照从右到左的顺序压栈。
方法区内存:
1.方法区又叫做静态区,主要存储class文件的信息和动态常量池(在jdk1.8以后常量池从方法区搬到了堆内存)。
2.方法区用于存储已被虚拟机加载的类信息,常量,静态变量等数据。
该图为堆和栈的关系简易图