[Java] 引用类型

1)强引用 :创建一个对象并把这个对象直接赋给一个变量,eg :Person person = new Person("sunny"); 不管系统资源有么的紧张,强引用的对象都绝对不会被回收,即使他以后不会再用到。

2)软引用 :通过SoftReference类实现,eg : SoftReference<Person> p = new SoftReference<Person>(new Person("Rain"));,内存非常紧张的时候会被回收,其他时候不会被回收,所以在使用之前要判断是否为null从而判断他是否已经被回收了。

3)弱引用 :通过WeakReference类实现,eg : WeakReference<Person> p = new WeakReference<Person>(new Person("Rain"));不管内存是否足够,系统垃圾回收时必定会回收。

关于软引用和弱引用的区别可以使用下面的例子来说明。

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

SoftReference<Student> softp = new SoftReference<Student>(new Student("Rain"));
WeakReference<Student> weakp = new WeakReference<Student>(new Student("Rain"));
System.gc();
if(softp.get()==null){
    System.out.println("soft gc");
}else{
    System.out.println("soft no gc");
}

if(weakp.get()==null){
    System.out.println("weakp gc");
}else{
    System.out.println("weakp no gc");
}

output:

soft no gc
weakp gc

可见软引用并没有被回收,弱引用被回收了。

4)虚引用 :不能单独使用,主要是用于追踪对象被垃圾回收的状态。通过PhantomReference类和引用队列ReferenceQueue类联合使用实现

[1] http://www.admin10000.com/document/1671.html

时间: 2024-10-11 00:10:43

[Java] 引用类型的相关文章

Java引用类型详解

JVM  的垃圾回收器对于不同类型的引用有不同的处理方式.java中对于一个对象来说,只要有引用的存在,它就会一直存在于内存中.如果这样的对象越来越多,超出了JVM中的内存总数,JVM就会抛出OutOfMemory错误.虽然垃圾回收的具体运行是由JVM来控制的,但是开发人员仍然可以在一定程度上与垃圾回收器进行交互,其目的在于更好的帮助垃圾回收器管理好应用的内存.这种交互方式就是使用JDK1.2 引入的  java.lang.ref包. 强引用(strong reference) 在一般的 Jav

java 引用类型及作用

java 引用类型 0. 引言 Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference , 这 4 种类型的引用与 GC 有着密切的关系. 1. 强引用 (StrongReference) 普通的引用做法,如: String str = "hello"; 只要引用存在就不会被回收,除非手动置为null,或者超出范围,gc才会回收 2. 软引用 (SoftReferenc

深入理解Java引用类型

深入理解Java引用类型 在Java中类型可分为两大类:值类型与引用类型.值类型就是基本数据类型(如int ,double 等),而引用类型,是指除了基本的变量类型之外的所有类型(如通过 class 定义的类型).所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失), 基本的变量类型只有一块存储空间(分配在stack中), 而引用类型有两块存储空间(一块在stack中,一块在heap中),在函数调用时Java是传值还是传引用,这个估

Java 引用类型及常见应用

引用的类型主要关注的是该引用如何与GC交互. 1.Strong References java中常见的引用类型: StringBuffer buf = new StringBuffer(); 这里buf就是一个强引用.如果一个对象在一条强引用链上可达,那么它不适合GC,也不会被回收. 2.Weak References 弱引用,是一种较弱的引用,它不会阻止GC回收只被弱引用引用的对象. 当一个对象最强只被弱引用引用时,那么在下个GC周期,它可以被回收. 你可以使用如下的方式构建一个弱引用: We

Java引用类型

??博主最近在整理Java集合框架时,在整理到WeakHashMap的时候,觉得有必要先阐述一下Java的引用类型,故此先整理的这篇文章,希望各位多提提意见. ??闲话不多说,直接进入主题.Java中提供了4个级别的引用:强应用.软引用.弱引用和虚引用.这四个引用定义在java.lang.ref的包下. 强引用( Final Reference) ??就是指在程序代码中普遍存在的,类似Object obj = new Object()这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的

Java引用类型作为形参和返回值

一.什么是引用类型 在Java中引用类型包括三种:类.抽象类.接口. 二.引用类型作为形参使用 1.类作为形参 /** * 类作为形参,实际传递的是该类的对象 */ class Student { public void study() { System.out.println("Good Good Study, Day Day Up"); } } class StudentDemo { public void show(Student s) { s.study(); } } publ

今天聊一聊Java引用类型的强制类型转换

实际上基本类型也是存在强制类型转换的,这里简单提一下.概括来讲分为两种: 1.自动类型转换,也叫隐式类型转换,即数据范围小的转换为数据范围大的,此时编译器自动完成类型转换,无需我们写代码 2.强制类型转换,也叫显式类型转换,即数据范围大的转换为数据范围小的,此时数据会损失精度,强转也需要我们书写代码来实现,使用需谨慎 下面我们来看看,引用类型的强制类型转换: 同样分两种:隐式和显式 1.隐式强转,就是父类的引用指向子类的对象,例如 Father类和Child类,我们可以这样写: Father f

Java引用类型具体解释

JVM  的垃圾回收器对于不同类型的引用有不同的处理方式.java中对于一个对象来说,仅仅要有引用的存在,它就会一直存在于内存中.假设这种对象越来越多,超出了JVM中的内存总数,JVM就会抛出OutOfMemory错误.尽管垃圾回收的详细执行是由JVM来控制的.可是开发者仍然能够在一定程度上与垃圾回收器进行交互,其目的在于更好的帮助垃圾回收器管理好应用的内存.这种交互方式就是使用JDK1.2 引入的  java.lang.ref包. 强引用(strong reference) 在一般的 Java

java 引用类型 和 基本类型的理解

1.引用类型是一个容器,一个容器就是自己的子元素 2.基本类型是一个独立的元素 区别 容器都有自己特性(属性.方法) 基本类型没有 有自己的属性的是变量就是引用类型变量 反之就是基本类型. 可以试下,下面的变量声明以后根一个" . " 会有属性.方法出现吗? int i=0; String a="0"; boolean b=true; List list=new ArrayList(); list.add("st"); Array ae=null