什么是JAVA虚引用?

回答·14
最热
最新
  • JAVA中对象的应用有强软弱虚四种引用 主要是面对gc回收时得情况不一 虚引用遇到gc便会立即清除,但是其他不同的是,虚引用被gc掉之后会有一个响应,也就是有返回结果 这种方式主要应用于java代码在堆外创建的内存,一般情况下堆外不清楚何时回收,一般做法是通过虚引用做一个标志,如果虚引用被gc掉,则可以通知jvm或者是代码对堆外内存做一个清除
  • 不同虚拟机的运行时数据区可能略微有所不同,但都会遵从 Java 虚拟机规范, Java 虚拟机规范规定的区域分为以下 5 个部分: 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成; Java 虚拟机栈(Java Virtual Machine Stacks):用于存储局部变量表、操作数栈、动态链接、方法出口等信息; 本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的; Java 堆(Java Heap):Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存; 方法区(Methed Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。
  • 强引用:地球不爆炸我就不会死 软引用:堆快炸了,我就得死 弱引用:只要 gc 就死 虚引用:被干死后出具死亡证明
  • 不影响对象的一切,一般用来通知开发人员对象被回收,在对象回收前执行一些操作,比如资源回收
  • 孔乙己吃茴香豆时说了茴字有几种写法,请问知道这么多写法有什么意义
  • 虚引用的对象只会在被回收时发送系统通知
  • 简而言之,虚引用是最弱的一种引用关系,一个对象是否有虚引用的存在完全不会对其生存时间构成影响,也无法用虚引用来获取一个对象实例。为一个对象设置虚引用关联的唯一目的就是希望能在这个对象被收集器回收时候收到一个系统通知。在 JDK1.2 之后都提供了 phantomReference 类来实现虚引用。虚引用必须和 ReferenceQueue 关联起来。    比起其他引用来说虚引用最微不足道。但是也有用处,虚在强弱上。
  • 生动形象,来人,赐文科状元
  • @邹小蒙 虚引用并不会在gc时立刻被清除掉,虚引用是一次或者多次gc后才会被清除的,遇到gc立刻被清除掉的是弱引用
  • 虚引用是对堆外内存的引用 不由虚拟机 gc 管理一般只有写虚拟机的人才用得到