堆栈、堆、方法区介绍

堆栈、堆、方法区介绍

预备知识
java数据类型:

基础数据类型:boolean、byte、short、char、int、long、float、double

引用数据类型:类、接口、数组

堆栈、堆、方法区
JAVA的JVM的内存可分为3个区:堆(heap)、堆栈(stack)和方法区(method)

堆区:

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

jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

栈区:

每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

方法区:

又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

运行时常量池都分配在 Java 虚拟机的方法区之中

栗子

public void test(){
A a = new A();
int b = 1;
}

public class A{

}


这个栗子中

a是A对象的引用所以放在栈中,A是自定义对象所以放在堆中.

b是基础数据类型所以在栈中.

A是自定义对象所以放在堆中"应该是new A()

小结
这里用一个在别处看到的栗子总结再好不过

堆和栈的区别可以用如下的比喻来看出:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就
走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自
由度小。

原文地址:https://www.cnblogs.com/qqfff/p/13055927.html