鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > erlang > >

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

来源:互联网 作者:佚名 时间:2016-05-30 10:49
点击进入_更多_Java千百问 1、java堆和栈有什么区别 了解jvm内存管理看这里:jvm是如何管理内存的 在 《jvm是如何管理内存的》 这篇文章中,已经对 PC寄存器 (计数器 pc registers)、 方法区 (method area)、 本地方法栈 (native method stacks)、 栈

点击进入_更多_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的值。

网友评论
<