A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹奎 中级黑马   /  2013-7-24 13:29  /  1436 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹奎 于 2013-7-25 11:12 编辑

jvm在内存里面开辟了一个空间,在这个空间里面有方法区,有堆区,有栈区,那么这些区有什么不同呢?一个对象从出生到消亡在这些区里面是走的一个什么线路呢?不理解

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

3 个回复

倒序浏览
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

一个栈内存只能引用一个堆内存空间,但是一个堆内存空间可以被多个栈内存所共同指向

方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
方法区(非堆):是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
java堆:是虚拟机中所管理的内存中区域最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆是垃圾收集器管理的主要区域。
java虚拟机栈:线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 李健09 于 2013-7-25 09:23 编辑

堆区:
存储的全部是对象实例,在虚拟机启动时创建,一个堆区(heap)被所有线程共享,每个对象都包含一个与之对应的class的信息以便获得操作指令,堆中不存放基本类型和对象引用,只存放对象本身(实例)
栈区:
每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用指向,对象都存放在堆区中;每个栈中的数据(原始类型和对象引用)都是私有的,栈与栈之间不能访问.
栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:(代码区,共享区)
又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class(类信息),static(静态变量)和常量,就是编译器编译后的代码,方法等语句
堆,对象的初始化-->把初始化的堆的地址给栈-->栈的基础数据,对象的引用指向,操作指令-->方法区,通过共享出来的方法执行操作指令
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马