美文网首页
final修饰的引用的存储位置

final修饰的引用的存储位置

作者: 海在路上 | 来源:发表于2018-11-09 14:47 被阅读3次
  • final修饰的引用只是代表这个引用的引用对象不可更改。并不代表内存位置,仍然会被存储在栈和堆中(所以内存泄漏和这个修饰符无关)。内存泄漏的几种境况:
    Ⅰ. static : 存储位置方法区(类加载过程)
    Ⅱ. 局部变量:存储在栈中(线程和栈是一对一的,但是线程的运行时间具有不可控性)
    Ⅲ. 成员变量:存储在堆中 (生命周期长的对象引用生命周期短的对象)
  • JVM中的常量池,只是存储 字面量和符号引用
    1. 字面量
      int i = 1;                //把整数1赋值给int型变量i,整数1就是Java字面量,
      String s = "abc";        //中的abc也是字面量。
    
    1. 符号引用

    符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量出现。符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中。在Java中,一个java类将会编译成一个class文件。在编译时,java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替。比如org.simple.People类引用了org.simple.Language类,在编译时People类并不知道Language类的实际内存地址,因此只能使用符号org.simple.Language(假设是这个,当然实际中是由类似于CONSTANT_Class_info的常量来表示的)来表示Language类的地址。各种虚拟机实现的内存布局可能有所不同,但是它们能接受的符号引用都是一致的,因为符号引用的字面量形式明确定义在Java虚拟机规范的Class文件格式中。

相关文章

  • final修饰的引用的存储位置

    final修饰的引用只是代表这个引用的引用对象不可更改。并不代表内存位置,仍然会被存储在栈和堆中(所以内存泄漏和这...

  • 2020-01-18

    final修饰表示引用不能变而不是引用的对象不能变 final StringBuffer a=new St...

  • final关键字详解

    final的作用 final根据修饰位置的不同作用也不相同,针对三种情况:1)修饰变量,被final修饰的变量必须...

  • 从"java传参只传引用"了解Integer作为形参传参

    虽然参数传递的是引用对象,但是Integer源码里用来存储int对象的value使用了final进行修饰: 所以我...

  • final

    一、final关键字的功能概述 final关键字可以用来修饰引用、方法和类。用来修饰一个引用 如果引用为基本数据类...

  • final关键字

    1 final修饰基本数据类型保证不可变 2 final修饰引用保证引用不能指向别的对象,否则会报错。 3 fin...

  • Java自学-接口与继承 final

    Java的修饰符final final修饰类,方法,基本类型变量,引用的时候分别有不同的意思。 示例 1 : fi...

  • Java 中 final 用法释疑与总结

    final 修饰的地方 修饰基础数据成员(修饰含义:该成员修饰为常量,不可修改) 修饰类或对象的引用(修饰含义:改...

  • 【Java面试题】2 Java中使用final关键字修饰一个变量

    问题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变答:使用final关键字修饰一个变量时...

  • Java基础(二)

    1.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 使用final关键字修饰一个变量时,...

网友评论

      本文标题:final修饰的引用的存储位置

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