码迷,mamicode.com
首页 > 编程语言 > 详细

Java千百问_07JVM架构(006)_java堆和栈有什么区别

时间:2016-05-23 15:18:24      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

点击进入_更多_Java千百问

1、java堆和栈有什么区别

了解jvm内存管理看这里:jvm是如何管理内存的
《jvm是如何管理内存的》这篇文章中,已经对PC寄存器(计数器 pc registers)、方法区(method area)、本地方法栈(native method stacks)、(stacks)、(heap)内存区域做了介绍,其中栈(stacks)、堆(heap)是java内存管理中非常重要的两个部分,具体区别如下:

技术分享

2、基本数据类型储存在栈中吗

基本数据类型由于长度固定,且需要空间比较少,所以直接存储在中(String是一个特殊的类型,它的值存储在堆中,但是通过池达到和栈类似的存取速度,具体看这里:String在内存中如何存放)。而对象比较大,所以栈中只存储一个4btye的引用地址(逻辑地址)。

实例:

int a = 3int b = 3

分析如下:

  1. 编译器先处理int a = 3;首先它会在中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。

  2. 接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。

  3. 这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向它。因此a值的改变不会影响到b的值。

Java千百问_07JVM架构(006)_java堆和栈有什么区别

标签:

原文地址:http://blog.csdn.net/ooppookid/article/details/51474468

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!