Java_内存分区堆(heap) 栈(stack)和方法区(method)

 

本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/8913425

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

1.堆区(heap)

    (1).存储的全部是对象实体,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令);
    (2).jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身;
    (3).对象实体的数据可以不初始化,设置为默认值,而栈区则不同.

2.栈区(stack)

    1).每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
    2).每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
    3).栈区定义的基本数据类型int i; 可以这样定义,但是如果想使用i,必须对i进行初始化

3.方法区(method) 

    跟堆一样,被所有的线程共享,方法区包含所有的class和static变量(类信息和静态变量信息)。类文件是由加载器进行过滤后加载至内存空间,而加载进来的也是Class的实例对象。

        疑问:有上面可知实例对象是存储于堆区,而该Class实例对象却加载至方法区,其中必然有一种关联,现在还不明白具体原因,待以后解决!参考这个>>

 Java_内存分区堆(heap) 栈(stack)和方法区(method)_第1张图片

你可能感兴趣的:(Java,Java基础增强)