java中栈,堆,方法区
最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理
参考了https://www.cnblogs.com/hqji/p/6582365.html
1.栈
每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
栈内存的变量都是使用完就释放掉,但是必须是这个变量脱离了他的作用域才释放
举例
{ int a=100; System.out.print(a); }
这个a是基本类型就存放在栈里
2.堆(存放的是new出来的对象,new出来的都有地址值)
存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令);
虚拟机jvm只有一个heap区,被所有线程共享,不存放基本类型和对象引用,只存放对象本身。
new出来的对象都有默认值
3.方法区
1、又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量;
2、方法区中包含的都是在程序中永远的唯一的元素
举个例子
public static void main(String[] args) { Student s1=new Student(); int i=8; }
这里的s1是Student类的引用所以在栈中
Student是本来定义的对象。存在堆中,
i是基本数据类型,存在栈中