Java面试:说一下堆、栈、方法区的区别

Java面试:说一下堆、栈、方法区的区别_第1张图片

堆和栈都是Java用来在RAM中存放数据的地方。
区别总结:1.存储数据类型不同 2.线程使用情况不同 3.存取速度不同

堆:
    1.提供所有类实例和数组对象存储区域

    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
    
    3.Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。

    4.堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。
    但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。
    
栈:
    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
    
    3.栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。

    4.栈的优势是,存取速度比堆快,栈数据可以共享。但缺点是,存放在栈中的数据占用多

你可能感兴趣的:(Java面试题)