Java
对引用的分类
级别
|
什么时候被垃圾回收
|
用途
|
生存时间
|
强
|
从来不会
|
对象的一般状态
|
JVM
停止运行时终止
|
软
|
在内存不足时
|
对象简单?缓存
|
内存不足时终止
|
弱
|
在垃圾回收时
|
对象缓存
|
gc
运行后终止
|
假象
|
Unknown
|
Unknown
|
Unknown
|
1
、强引用:
public static void main(String[] args) {
MyDate date = new MyDate();
System.gc();
}
解释:即使显式调用了垃圾回收,但是用于
date
是强引用,
date
没有被回收
2
、软引用:
public static void main(String[] args) {
SoftReference ref = new SoftReference(new MyDate());
drainMemory(); //
让软引用工作
}
解释:在内存不足时,软引用被终止,等同于:
MyDate date = new MyDate();
//-------------------
由
JVM
决定运行
-----------------
If(JVM.
内存不足
()) {
date = null;
System.gc();
}
//-------------------------------------------------------------
3
、弱引用:
public static void main(String[] args) {
WeakReference ref = new WeakReference(new MyDate());
System.gc(); //
让弱引用工作
}
解释:在
JVM
垃圾回收运行时,弱引用被终止,等同于:
MyDate date = new MyDate();
//------------------
垃圾回收运行
------------------
public void WeakSystem.gc() {
date = null;
System.gc();
}
4
、假象引用:
public static void main(String[] args) {
ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(new MyDate(), queue);
System.gc(); //
让假象引用工作
}
解释:假象引用,在实例化后,就被终止了,等同于:
MyDate date = new MyDate();
date = null;
//-------
终止点,在实例化后,不是在
gc
时,也不是在内存不足时
--------
分享到:
相关推荐
### Java对象引用详解 #### 一、Java对象与引用的基本概念 在Java中,对象是类的一个实例,而引用则是指向这些对象的变量。理解Java中的对象与引用之间的区别至关重要,因为这涉及到如何管理和操作对象。 #### 二...
本文将从以下几个方面详细解析对象与引用的基本概念及其相互间的关系。 #### 一、对象与引用的基础概念 **对象**: 在Java中,对象是类的一个实例,即根据类的模板创建出来的具体实体。每个对象都有自己的属性(如...
### Java中对象与对象引用的区别 #### 基础概念 在Java编程语言中,对象与对象引用是非常基础且重要的概念。理解它们之间的区别对于掌握Java面向对象编程至关重要。 #### 对象与引用定义 - **对象**:在Java中,...
首先,我们需要理解什么是Java对象。在Java中,对象是类的实例。当我们使用`new`关键字创建一个类的实例时,就创建了一个对象。对象包含了数据(称为属性或成员变量)和行为(称为方法)。例如,如果我们有一个名为`...
### 浅谈Java面向对象与引用 在Java学习过程中,对于面向对象的理解和引用机制的掌握是至关重要的。本文将围绕这两个概念进行深入探讨,并针对初学者常见的疑惑点进行解答。 #### Java面向对象基础 Java是一种...
总结一下,当需要对Java对象数组按多个属性排序时,我们可以: 1. 实现`Comparator`接口并自定义`compare()`方法。 2. 使用lambda表达式或方法引用来创建`Comparator`实例,使代码更加简洁。 3. 对于数组,使用`...
【标题】:“java解析DWG文件为json使用superMap” 【描述】:“java使用superMap解析DWG文件为json输出,本地通过,附件中为word操方式按照步骤可以导入数据集” 【标签】:“java解析DWG文件json java读取dwg...
栈内存主要存储基本类型和对象引用,生命周期短,随着方法调用的结束而销毁。堆内存则用于存储所有对象实例,其生命周期较长,由垃圾回收器(Garbage Collector,GC)管理。当一个对象不再被引用时,GC会自动回收该...
### Java对MHT文件解析及内容抓取技术详解 #### 一、引言 MHT(Mime HTML)文件是一种将HTML文档与嵌入资源(如图像、样式表等)合并为一个文件的格式,方便在网络上传输。本文将详细介绍如何使用Java语言解析MHT...
4. 示例中的TestRef程序,通过简单的变量赋值和对象引用传递来展示基本类型和引用类型的区别。基本类型赋值时值的拷贝,而引用类型赋值则是引用的拷贝。因此,输出结果先是10,然后是11。 5. TestReturnRef程序中...
### Java对象创建过程详解 在Java编程语言中,对象是程序的基本单元,一切皆对象这一概念使得Java在面向对象编程领域具有重要的地位。本文将详细阐述Java对象的创建过程,帮助读者深入理解Java基础。 #### 一、类...
本项目“ELF解析Java版”提供了一个用Java语言实现的ELF文件解析工具,名为“jelf-master”。这个工具使得开发者能够在Java环境中理解和处理ELF文件的内部结构,从而更好地进行程序分析、调试或者二进制代码操作。 ...
本文将深入探讨如何计算Java对象所占内存,并通过提供的代码示例进行详细解析。 首先,我们需要理解Java对象内存占用的基本原理。每个Java对象都由三部分组成:对象头(Object Header)、实例数据(Instance Data)...
本篇文章将深入探讨Java对象在JVM内存中的布局,帮助我们理解JVM是如何存储和管理对象的。 首先,我们要知道JVM内存主要分为以下几个区域: 1. **堆内存(Heap)**:这是Java对象的主要存储区域,所有通过`new`...
解析Java中的String对象的数据类型字符串 Java中的String对象是一种特殊的数据类型,它不同于基本数据类型,也不同于其他对象。String对象的默认值是null,但它又是一种特殊的对象,有其它对象没有的一些特性。 ...
### Java中的指针概念与引用解析 #### 一、引言 Java作为一种广泛使用的面向对象编程语言,在设计之初就摒弃了C/C++中的指针概念。然而,尽管Java没有传统意义上的指针,但仍然存在一种类似的概念——引用。本文将...
本文将深入探讨如何利用Java技术解决“PDF解析”和“PPT解析”的问题,以及如何通过将PPT转换为PDF来解决图片质量和插图转换的问题。 首先,我们要了解Java中的PDF解析。PDF(Portable Document Format)是一种广泛...
Java内存分配全面解析 Java程序在执行过程中,其内存分配主要涉及到JVM(Java Virtual Machine,Java虚拟机)的不同区域。这些区域包括寄存器、栈、堆、常量池、代码段和数据段。理解这些内存区域的工作原理对于...
Java对象到XML转换是开发过程中常见的需求,尤其是在处理数据交换或者序列化时。XML因其结构化和可读性,常被用作数据存储和传输格式。然而,将Java对象转换为XML并不总是那么直观,特别是在处理复杂对象结构时。本...
Java对象序列化是一种将Java对象转换为字节流的过程,以便于存储、传输或在网络间进行通信。这一过程使得对象的状态能够被持久化,即使在程序关闭后也能重新恢复。在Java中,对象序列化是通过实现`java.io....