黑马程序员技术交流社区
标题:
java虚拟机内存问题
[打印本页]
作者:
曹奎
时间:
2013-7-24 13:29
标题:
java虚拟机内存问题
本帖最后由 曹奎 于 2013-7-25 11:12 编辑
jvm在内存里面开辟了一个空间,在这个空间里面有方法区,有堆区,有栈区,那么这些区有什么不同呢?一个对象从出生到消亡在这些区里面是走的一个什么线路呢?不理解
作者:
jttsai
时间:
2013-7-24 15:50
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
一个栈内存只能引用一个堆内存空间,但是一个堆内存空间可以被多个栈内存所共同指向
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
作者:
yangchao313
时间:
2013-7-24 19:47
方法区(非堆):是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
java堆:是虚拟机中所管理的内存中区域最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆是垃圾收集器管理的主要区域。
java虚拟机栈:线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。
作者:
李健09
时间:
2013-7-25 09:15
本帖最后由 李健09 于 2013-7-25 09:23 编辑
堆区:
存储的全部是对象实例,在虚拟机启动时创建,一个堆区(heap)被所有线程共享,每个对象都包含一个与之对应的class的信息以便获得操作指令,堆中不存放基本类型和对象引用,只存放对象本身(实例)
栈区:
每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用指向,对象都存放在堆区中;每个栈中的数据(原始类型和对象引用)都是私有的,栈与栈之间不能访问.
栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:(代码区,共享区)
又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class(类信息),static(静态变量)和常量,就是编译器编译后的代码,方法等语句
堆,对象的初始化-->把初始化的堆的地址给栈-->栈的基础数据,对象的引用指向,操作指令-->方法区,通过共享出来的方法执行操作指令
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2