java 内存结构

      Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈内存

            用于存储变量如 基本数据类型和对象句柄。当数据使用完,所占空间会自动释放。

            栈有一个很重要的特殊性,就是存在栈中的数据可以共享。

堆内存

            1,数组和对象,通过new建立的实例都存放在堆内存中。
            2,每一个实体都有内存地址值。
            3, 实体中的变量都有默认初始化值。
             4,实体不再被使用,会在不确定的时间内被垃圾回收器回收。

例子:

int a = 1;

int b = 1;

编译器先处理int a = 1;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有1这个值,如果没找到,就将1存放进来,然后将a指向1。接着处理int b = 1;在创建完b的引用变量后,因为在栈中已经有1这个值,便将b直接指向1。 这样,就出现了a与b同时均指向1的情况,即是存在栈的数据可以共享,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度。 但是这和俩个对象的引用指向同一个对象不一样,因为修改a的值,b是不会变化的,因为编译器会完成。但是如果你修改对象后,俩个引用都会变化的。

 

String str1 = new String("java");

String str2= "java";

System.out.println(str1 == str2); //false

因为new为在堆中创建对象,而变量str2在栈中创建,然后查“java”是否在栈中,没有就存进来。二者是不一样的

转载于:https://my.oschina.net/yeqc/blog/1533809

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值