一,简介
在java中提供了四种引用的类型。分别为StrongReference、WeakReference 、SoftReference以及 PhantomReference。
二,四种引用类型的作用及区别
StrongReference:强引用类型。是java 的默认引用实现,如果不特别指定,代码中使用的都是强引用。只要对象存在强引用,则gc的时候都不会清理掉该对象。
WeakReference:弱引用类型。通过WeakReference引用的对象,如果没有该对象的强引用。则gc的时候会清理掉该对象。
SoftReference:软引用类型。通过SoftReference引用的对象,即使没有该对象的强引用。gc时也不会回收该对象。只有当jvm内存不足时才会被回收, 这一特性使得 SoftReference 非常适合缓存应用数据。
PhantomReference:虚引用类型。由于使用场景极少,不做解释。
三,应用举例
static class User implements Serializable{ private static final long serialVersionUID = 1L; private String name = null; public User(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public static void main(String[] args) { //強引用类型:变量strongReference对对象的引用为强引用 User strongReference = new User("strongReference"); System.out.println(strongReference.getName()); //弱引用类型: 变量weakReference对对象的引用为弱引用 WeakReference<User> weakReference = new WeakReference<User>(new User("weakReference")); System.out.println(weakReference.get().getName()); //软引用类型: 变量softReference对对象的引用为软引用 SoftReference<User> softReference = new SoftReference<User>(new User("softReference")); System.out.println(softReference.get().getName()); User user = weakReference.get();//user对对象的強引用 System.out.println(user.getName()); user = null;//清除強引用 weakReference.clear();//清除弱引用 softReference.clear();//清除软引用 } //弱引用测试 WeakReference<User> weakReference = new WeakReference<User>(new User("weakReference")); System.out.println(weakReference.get());//user对象 System.gc();//调用jvm 垃圾回收器(不一定立即执行) Thread.sleep(10000);//阻塞线程10秒,等待gc执行 System.out.println(weakReference.get()); //null
具体JDK案例,可参考WeakHashMap的实现。
相关推荐
Java中的四种引用类型是Java内存管理的重要组成部分,它们分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。每种引用类型具有不同的特点和用途,...
Java Development Kit(JDK)是Java编程语言的软件开发工具包,它包含了编译器、JRE(Java Runtime Environment)、调试器以及其他工具,使开发者能够编写、运行和调试Java应用程序。这里我们关注的是两个版本:JDK ...
以下是JDK 1.5与JDK 1.4之间的一些主要区别: 1. **泛型(Generics)** - 泛型的引入极大地提高了代码的安全性和类型检查能力。在JDK 1.4中,集合存储的是Object对象,需要强制类型转换,这可能导致运行时错误。而...
Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一套开发和运行Java应用程序所需的工具和库。本文将详细探讨JDK 1.6和JDK 1.8之间的主要差异,以及它们在开发过程中的应用。 JDK 1.6,也被称为Java...
2. 方法引用和构造器引用:进一步简化了Lambda表达式的使用,可以直接引用方法和构造器。 3. 接口默认方法:接口中可以定义默认实现的方法,允许接口扩展而不会破坏已有实现。 4. Date/Time API(JSR 310):提供了...
2. **方法引用和构造器引用**:与Lambda表达式紧密相关,方法引用允许直接引用已有方法,而构造器引用可以用来创建新对象。 3. **流(Stream API)**:这个新的API允许对集合进行更高效的操作,支持序列化和并行化...
Java Development Kit (JDK) 1.8,通常被称为JDK 8,是Java编程语言的一个重要版本,由Oracle公司发布。这个版本引入了许多新特性、优化和改进,旨在提高开发人员的效率和代码的可维护性。 JDK 8中文说明文档提供了...
6. **动态类型语言支持**:JEP 335(Dynamic Language Support in the JDK)增强了对动态类型语言的支持。 从这两个版本的对比可以看出,Java的进化是一个持续的过程,每个新版本都在尝试优化性能、提升开发者体验...
**四、JDK 8的重要特性** 1. **Lambda表达式**:引入了函数式编程的概念,简化了多线程编程和事件处理。 2. **Stream API**:提供了一种处理集合的新方式,使代码更简洁、易读。 3. **方法引用和构造器引用**:允许...
2. **方法引用和构造器引用**:除了lambda表达式,JDK 8还支持方法引用和构造器引用,可以直接引用已存在的方法或构造器,无需编写额外的代码块。 3. **Stream API**:Stream API是JDK 8的一大亮点,它提供了一种新...
JDK1.7是在2012年发布的,引入了许多新特性,如动态类型语言支持(invokedynamic字节码指令),Project Coin的小型语言改进,Fork/Join框架以提升多线程性能,以及对NIO.2的增强,提供更好的文件系统访问能力。...
方法引用和默认方法也是JDK8的重要特性,增强了接口的功能。 在Windows 64位环境下安装这些JDK时,需要注意以下几点: 1. **下载**:根据操作系统版本选择合适的安装包,这里是针对64位Windows的,所以下载对应的x...
3. **枚举(Enums)**:提供了一种新的数据类型,用于创建固定的、不可变的值集合。 4. **Annotations(注解)**:提供了一种元数据机制,可以在源代码中添加元数据,用于编译时或运行时的检查和处理。 5. **变量...
JDK 8替换原有的`java.util.Date`和`java.util.Calendar`,引入了`java.time`包,包含`LocalDate`、`LocalTime`、`LocalDateTime`等新类型,提供了更加强大且易用的日期和时间操作。 ### 7. **Optional 类** `java....
10. **类型推断增强**:编译器在JDK1.8中的类型推断能力得到了增强,使得编译器能更好地理解代码意图,减少冗余的类型声明。 以上就是JDK1.8的主要知识点。这些特性不仅丰富了Java语言的功能,也极大地推动了Java...
JDK8增强了注解的使用,允许在类型参数、类型变量、泛型实例化、数组类型、方法返回类型、抛出的异常类型等位置使用注解,增加了注解的适用范围。 9. **新的并发改进** 并发包`java.util.concurrent`中增加了Fork...
4. **方法引用来代替lambda**:除了lambda,JDK 8还引入了方法引用,可以直接引用已有方法,如`Objects::equals`,这在某些情况下比lambda更简洁。 5. **Date和Time API的改进**:JDK 8对日期和时间处理进行了重构...
9. **Type Annotations**:类型注解提供了一种在类型层次上添加元数据的方式,主要用于静态分析工具和编译器插件。 10. ** Nashorn JavaScript引擎**:JDK 8内置了一个Nashorn JavaScript引擎,允许Java代码直接...
4. **动态类型推断增强(var关键字)**:在JDK 11中,局部变量类型推断得到了增强,可以用`var`关键字声明变量,编译器会自动推断类型。 5. **强引用的弱化**:引入了`WeakReferences`和`SoftReferences`的替代品`...
Java Development Kit (JDK) 是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具和库。在这个特定的压缩包中,我们关注的是JDK的1.8版本,而且是针对32位操作系统的。这个版本...