java 内存结构
java 内存结构
秋雨-秋叶 发表于3个月前
java 内存结构
  • 发表于 3个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

      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”是否在栈中,没有就存进来。二者是不一样的

共有 人打赏支持
粉丝 0
博文 4
码字总数 1267
×
秋雨-秋叶
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: