文章标题

来源:互联网 发布:整数划分问题c语言 编辑:程序博客网 时间:2024/05/21 19:19

1、java堆和栈有什么区别

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

这里写图片描述

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

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

实例:

int a = 3 ;
int b = 3 ;
1
2
1
2
分析如下:

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

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

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

0 0
原创粉丝点击