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

  • 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就...
    木有鱼丸啦阅读 3,576评论 0 0
  • 前言 不知道大家有没有这样一种感觉,程序员的数量井喷了。可能是因为互联网火了,也可能是各家培训机构为我们拉来了大量...
    活这么大就没饱过阅读 7,648评论 6 25
  • 文章摘录地址:http://www.cnblogs.com/iliuyuet/p/5603618.html 1.栈...
    蘑菇姐夫阅读 4,605评论 0 5
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,445评论 11 349
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,390评论 0 3