JVM的内存 堆(heap)、栈(stack)和方法区(method)
2016-06-15 00:00
169 查看
摘要: JVM的内存 堆(heap)、栈(stack)和方法区(method)
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
对于局部变量,如果是基本类型,会把值直接存储在栈;如果是引用类型,比如String s = new String("william");会把其对象存储在堆,而把这个对象的引用(指针)存储在栈。 再如 String s1 = new String(“william”); String s2 = s1; s1和s2同为这个字符串对象的实例,但是对象只有一个,存储在堆,而这两个引用存储在栈中。 类的成员变量在不同对象中各不相同,都有自己的存储空间(成员变量在堆中的对象中),基本类型和引用类型的成员变量都在这个对象的空间中,作为一个整体存储在堆。而类的方法却是该类的所有对象共享的,只有一套,对象使用方法的时候方法才被压入栈,方法不使用则不占用内存。
相关文章推荐
- CSS换行文本溢出显示省略号
- Java中的字符串最大长度
- 0-18 地图一公分等于多少米
- 从相册获取图片,并获取裁剪后图片(系统自带)
- 仿微信"个人头像"
- 根据系统状态栏判断网络状态
- oracle patition 分区和索引
- JS函数定义特性摘录
- kafka性能测试总结
- phoenixframework自动化测试平台webUI模块执行js代码示例
- 解决jquery的scrollTop()置顶的浏览器兼容
- 四叶草主题中字体模糊、透明无法看清的问题解决办法
- oracle子接点与父节点上下级关系数据库查询语句,及联查询,
- 嵌入式、安卓培训到大机构 济南华清远见有三保障
- JS请求时间过长的解决思路
- web项目操作卡顿的原因
- postgresql jdbc 了解postgresql数据库对jdbc的参数设置
- iOS NSDate算出的时间不正确的解决办法
- Jquery 文本 精确查找
- NSJSONSerialization类抛出异常处理(swift)