美文网首页The Magnificent Java程序员
从内存的角度看Java引用和对象

从内存的角度看Java引用和对象

作者: 伤口不该结疤 | 来源:发表于2017-02-04 17:06 被阅读89次
  • 0. 引言

    最近在读《深入理解Java虚拟机:JVM高级特性与最佳实践》和《Java编程思想》,通过学习和了解Java内存区域的结构,可以对Java引用和对象有一个清晰的理解。

  • 1. 什么是引用

    • 每种编程语言都有自己操作内存中元素的方式,C和C++使用指针,而Java则使用引用

    • 将引用想象为遥控器,对象想象为电视,通过遥控器(引用)可以操作电视(对象)

         String s; // 只是一个引用
      
  • 2. 引用和对象的关系

    • 通过引用操作对象

         String s = "abcd"; // 通过引用s可以操作字符串对象"abcd"
      
  • 3. 引用和对象在内存中的储存位置

    • 引用和基本数据类型都存放在Java 栈中的本地方法表中

    • 而通过new创建的对象则是放到Java堆中

    • 引用存放的是对象在Java堆的地址,通过引用可以操作对象

引用和对象在内存中的储存位置
  • 4. 引用和对象的作用域

    • 由于引用和对象的储存空间不同,导致它们的作用域也不一样

    • 引用存放于栈中,当代码执行到{时,引用s入栈,执行到}时,s出栈,s生命周期结束

    • 对象是储存到Java堆中,由垃圾收集器回收String对象所占内存。

{
    String s = new String("a string")
}
/* 引用s作用域结束于}
    String对象仍继续占据内存空间,最终由垃圾收集器回收String对象所占内存
*/
  • 5. 基本数据类型赋值和引用赋值

    • 基本数据类型进行赋值:例如,下图中b = a , 只会将a的内容复制给b,修改a的内容不会改变b的值,这是因为它们占用的是不同的物理空间

    • 引用赋值:由于引用存放的是对象在Java堆中的地址,下图中str2 = str1, str1和str2指向同一个对象,因此修改str1的值会影响到str2,同理修改str2也会影响到str1。

基本数据类型赋值和引用赋值
  • 6. 参考

    • 深入理解Java虚拟机:JVM高级特性与最佳实践

    • Java编程思想

相关文章

  • 从内存的角度看Java引用和对象

    0. 引言最近在读《深入理解Java虚拟机:JVM高级特性与最佳实践》和《Java编程思想》,通过学习和了解Jav...

  • 对象的引用

    一、概述 Java对象的引用:强引用,软引用,弱引用和虚引用。众所周知,Java中是JVM负责内存的分配和回收,这...

  • Android:内存优化

    一.java内存管理机制 1.内存引用 从Java1.2版本开始引入了三种对象引用方式:SoftReference...

  • 关于Java中的四种引用方式

    java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。 ja...

  • Java的四种引用:强软弱虚

    java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象 jav...

  • Java四种引用

    引用是什么,引用就是在堆上分配了内存的对象的内存地址索引。拿到引用,就可以拿到堆上对应内存地址的对象。 Java ...

  • 堆和栈的区别

    栈内存用于存储基本类型变量和对象的引用;堆内存用来存储java中的对象。栈和堆.png 栈内存属于单个线程,每个线...

  • java内存模型

    引用: Java内存模型 java内存模型线程栈:本地变量,堆:对象,对象成员变量,静态成员变量 如果两个线程同时...

  • Java内存溢出

    Java内存溢出 堆溢出 大量对象占据了堆空间,而且这些对象是强引用,导致无法回收 直接内存溢出 Java的NIO...

  • 20160710_Programming

    ------JAVA20160710------1、实际的数组对象存储在堆内存中,如果引用该数组对象的数组引用变量...

网友评论

  • a6393228bea9:第5点,作者是不是写错了

    修改a的内容不会改变b的值

本文标题:从内存的角度看Java引用和对象

本文链接:https://www.haomeiwen.com/subject/sczjittx.html