Java强引用、软引用、弱引用、幻象引用详解

强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么? 如果面试问道: 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么? 你会如何回答? 我的回答: 不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。 强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,当然具体回收时机 阅读详情

原贴地址:http://www.appcnd.com/blog/articles/90.html

在Java中,除了原始数据类型的变量,其他所有都属于引用类型、指向各种不同的对象。

引用包含4种不同的类型:强引用、软引用、弱引用、幻象引用;不同的引用类型,主要体现的是对象不同的可达性状态和对垃圾回收的影响。

强引用

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

软引用

软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。

弱引用

弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。在java中,用java.lang.ref.WeakReference类来表示。

幻象引用

和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与幻象引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。幻象引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有幻象引用,就会把这个幻象引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了幻象引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个幻象引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

 

验证

设置堆大小(新生代≈10M,老年代≈10M)

1

-Xms20m -Xmx20m -XX:NewRatio=1

 

MyObj:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public class MyObj {

     

    public MyObj() {

        System.out.println("对象" + this + "创建");

    }

     

    /**

     * 重写finalize方法,在对象被gc的时候打印日志

     * @throws Throwable

     */

    @Override

    protected void finalize() throws Throwable {

        super.finalize();

        System.out.println(this + " is gc");

    }

 

}

1、强引用

1.1 

1

2

3

4

5

6

@Test

public void test01() {

    MyObj obj = new MyObj();

    // new一个20M的byte数组,使堆空间不足,进而触发gc

    byte[] bytes = new byte[1024 * 1024 * 20];

}

1

2

对象com.test.MyObj@4e9ba398创建

java.lang.OutOfMemoryError: Java heap space

分析:对于强引用对象,即使堆空间不足的时候也不会被垃圾回收。

1.2 

1

2

3

4

5

6

7

@Test

public void test01() {

    MyObj obj = new MyObj();

    obj = null;

    // new一个20M的byte数组,使堆空间不足,进而触发gc

    byte[] bytes = new byte[1024 * 1024 * 20];

}

1

2

3

对象com.test.MyObj@4e9ba398创建

com.test.MyObj@4e9ba398 is gc

java.lang.OutOfMemoryError: Java heap space

分析:将强引用置为null后,gc的时候才会被回收。

2、软引用

2.1 

1

2

3

4

5

6

7

8

@Test

public void test01() {

    SoftReference<MyObj> softReference = new SoftReference<MyObj>(new MyObj());

    System.out.println("堆空间充足的时候主动触发gc");

    System.gc();

    System.out.println("new一个20M的byte数组,使堆空间不足,进而触发gc");

    byte[] bytes = new byte[1024 * 1024 * 20];

}

1

2

3

4

5

对象com.test.MyObj@4e9ba398创建

堆空间充足的时候主动触发gc

new一个20M的byte数组,使堆空间不足,进而触发gc

com.test.MyObj@4e9ba398 is gc

java.lang.OutOfMemoryError: Java heap space

分析:可以明显看到在堆空间充足的时候,jvm不会回收软引用对象,软引用对象只有在堆空间不足的时候才会被回收。

2.2 结合ReferenceQueue使用

1

2

3

4

ReferenceQueue<MyObj> queue = new ReferenceQueue();

MyObj obj = new MyObj();

// 在obj被jvm回收的时候,相应的reference对象(softReference)会被放到queue里

SoftReference<MyObj> softReference = new SoftReference<MyObj>(obj, queue);

3、弱引用

1

2

3

4

5

6

@Test

public void test01() {

    WeakReference<MyObj> weakReference = new WeakReference<MyObj>(new MyObj());

    System.out.println("堆空间充足的时候主动触发gc");

    System.gc();

}

1

2

3

对象com.test.MyObj@4e9ba398创建

堆空间充足的时候主动触发gc

com.test.MyObj@4e9ba398 is gc

1

2

3

4

5

6

@Test

public void test01() {

    WeakReference<MyObj> weakReference = new WeakReference<MyObj>(new MyObj());

    System.out.println("new一个20M的byte数组,使堆空间不足,进而触发gc");

    byte[] bytes = new byte[1024 * 1024 * 20];

}

1

2

3

4

对象com.test.MyObj@4e9ba398创建

new一个20M的byte数组,使堆空间不足,进而触发gc

com.test.MyObj@4e9ba398 is gc

java.lang.OutOfMemoryError: Java heap space

分析:对于弱引用对象,无论堆内存是否充足,只要发生gc,弱引用对象都会被回收。

弱引用也可以结合ReferenceQueue来使用,在弱引用对象被回收的时候,其对应的reference对象会被放入queue中。

PySWMM新手避坑指南:从安装到批量处理INP文件的完整流程(附常见错误解决方案) 本文为PySWMM新手提供从环境搭建到批量处理INP文件的完整避坑指南。详细讲解了虚拟环境配置、库安装方法,并针对“无法打开输入文件”和对象访问错误等高频问题提供解决方案。核心部分展示了如何利用Python脚本实现INP文件的批量运行、结果汇总以及参数自动化修改,显著提升SWMM模型的工作效率。 阅读详情

相关推荐

iTunes登录协议全解析:从抓包到加密参数生成(含HTTPDebugger避坑指南)

本文深度解析iTunes登录协议,提供从环境搭建、绕过反调试机制到捕获网络流量的完整实战指南。重点剖析了如何利用HTTPDebugger等工具进行抓包,并详细解读了核心加密参数X-Apple-ActionSignature的生成逻辑,为网络安全研究员和协议分析工程师提供了一份详尽的逆向分析与协议复现教程。

weixin_28314575的博客 870

java中的4种引用介绍

java4种引用类型

qq_40301372的博客 702

西门子S7-200 SMART控制步进电机(二)

目录 一、开环运动控制方法 二、运动轴概述 三、配置运动控制向导 一、开环运动控制方法 S7-200 SMART CPU提供三种开环运动控制的方法: 1、脉冲宽度调制(PWM):内置于CPU中,用于速度、位置或占空比的控制 2、脉冲串输出(PTO):内置于CPU中,用于指定长度脉冲或指定距离的控制 3、运动轴:内置于CPU总,用于速度和位置的控制。本文所讲的就是通过运动轴实现步进电机的运动控制。 SR20和ST20 CP...

qq_43134642的博客 2万+

Java四大引用详解:强引用、软引用、弱引用、虚引用

​ 面试官考察Java引用会问到强引用、弱引用、软引用、虚引用,具体有什么区别?本篇单独来详解 @mikechen

mikechen的互联网架构 3172

TCMSP数据库+R语言实战:从网页爬虫到中药-靶点网络图的全流程解析

本文详细解析了如何使用R语言从TCMSP数据库抓取中药-靶点数据,并通过数据清洗、网络分析和可视化构建完整的中药作用机制研究流程。涵盖动态网页爬虫、ADME参数筛选、网络图构建及高级可视化技巧,为中医药现代化研究提供实用的生物信息学方法。

weixin_31304817的博客 337

79.ScottPlot的MVVM实现 C#例子 WPF例子

在你的 WPF 窗口的 XAML 文件中,定义一个,并将其Content属性绑定到 ViewModel 中的属性。这样可以将WpfPlot控件动态绑定到 ViewModel。

S13461120713的博客 2572

Java对象引用关系之软引用

JDK 1.2后,Java一共存在四种引用关系,分别是强引用、软引用、弱引用和虚引用。其中强引用是最常见的引用,代表程序运行所必须存在的引用,而软引用是非必须品,通常用于本地缓存。当我们在程序中使用时产生的就是一个强引用,强引用代表的程序的运行必须使用使用该对象,因此被强引用的对象不能被GC回收。而软引用不像强引用一样是必须品,当内存充足时,软引用会被保留,当内存紧张时,会优先回收无任何引用的对象,然后再考虑回收软引用。

weixin_44224167的博客 911

【nvidia-B200】实际生产报错NVRM: nvAssertFailedNoLog: Assertion failed: pIOVAS != NULL @ io_vaspace.c:601

升级 NVIDIA 驱动到 R545/R550 数据中心版本(解决 IOVA bug,这是性能差的根本原因);重启服务器(清理驱动残留资源,消除日志中的 NVRM 错误);验证 NVLink/PCIe 链路(确保 8 卡互联使用高速链路,而非单卡 PCIe 共享带宽)。完成这 3 步后,ncccl-test的all_reduce带宽应能提升至100GB/s 以上(取决于服务器的 NVLink/NVSwitch 配置),恢复正常性能。

jundao1997的专栏 652

JAVA基础之软引用

java引用之软引用

qq_73744651的博客 1226

海康DS-7604N-K1/RTB固件包

【摘要】海康DS-7604N-K1/RTB萤石云设备发布V4.30.091版本升级程序(2022.09.19),仅适用于指定型号。升级前需先升级至V3.4.106基础版本,刷机会重置设备为未激活状态,需重新设置admin密码。该机型支持密码/手势登录,无密码时可通过U盘升级。注意事项:升级存在风险,需确认程序适用性;升级过程严禁断电;必须阅读压缩包内的刷机说明。此为定制机型,非必要不建议升级。(150字)

海康威视技术支持 1580

k8s 不同node之间pod ip不通

底层k8s使用calico网络,ipip网络模式,kubevirt启动了2台虚拟机;在这两台虚拟机上再搭建k8s,calico网络,ipip网络模式。说明:我是使用helm安装的calico,改这个模式要改crd资源ippools。其他方式安装的calico修改方法可能不一样。在虚拟机上的k8s上启动了2个pod,分布在不同的node上,这两个pod不能ping通对方的pod ip。修改虚拟机之上的k8s集群的calico网络的ipipMode为Never即可,之前使用的是Always。

weixin_40548182的博客 4056

Java:强引用,软引用,弱引用和虚引用

引用类型被回收时间用途生存时间强引用从来不会对象的一般状态JVM停止运行时软引用内存不足时对象缓存内存不足时弱引用jvm垃圾回收时对象缓存gc运行后虚引用未知未知未知在实际程序设计中一般很少使用弱引用与虚引用,使用软引用的情况较多,这是因为软引用可以加速JVM对垃圾内存的回收速度,可以维护系统的运行安全,防止内存溢出(OutOfMemory)等问题的产生。

qq_43842093的博客 1166

C++软件调试与异常排查从入门到精通专栏介绍与文章汇总

根据近几年排查软件异常的实践与经验,系统地讲解了C++软件异常常见原因与常用排查方法,以图文并茂的方式给出具体的分析实例,带领大家逐步掌握C++软件异常排查的相关技术与要领。

dvlinker的技术专栏 23万+

java学习之详解 强引用、软引用、弱引用、幻象引用

我们说的不同的引用类型其实都是逻辑上的,而对于虚拟机来说,主要体现的是对象的不同的状态和对的影响。

白话机器学习 143

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java中的引用类型:强引用、软引用、弱引用与幻象引用详解

强引用:对象不可达之前不会被垃圾回收。软引用:当系统将要发生 OutOfMemoryError 时,会回收软引用的对象。弱引用:在下一次垃圾回收时,不管内存状态如何,都会回收弱引用的对象。幻象引用:无法通过它获取对象实例,只能在对象被回收后得到通知。这些引用类型的选择取决于具体的应用场景和内存管理需求。例如,如果你需要实现一个缓存,同时希望在内存紧张时自动释放缓存,那么软引用可能是最合适的选择。而对于需要在对象销毁时进行某些清理工作的场景,幻象引用则更为适用。

kiingking的博客 356

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java强引用、软引用、弱引用、虚引用(幻象引用)详解

一、概述:众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就...

hnhygkx的博客 4329

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【JAVA】强引用、软引用、弱引用、幻象引用有什么区别?

不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,当然具体回收时机还是要看垃圾收集策略。软引用。

BASK2312的博客 484

强引用、软引用、弱引用、幻象引用有什么区别?

强引用、软引用、弱引用、幻象引用有什么区别? 在java语言中,除了原始数据类型的变量,其他所有都是常用的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和jvm内部机关机制有着重要的作用 不同的引用类型,主要区别是:对象不同的可达性状态和对垃圾收集的影响 所谓强引用就是咱们普通的引用,只要还有强引用指向一个对象,就表明该对象还活着,垃圾收集器不会碰这样的对象,对于一个普通的引用,只要超过了引用的作用域且显式的将引用赋值为null,就可以被垃圾收集了 软引用就是相对于强引用的弱化一些的 引

qq_42762824的博客 355

Java基础巩固(一)引用

引用分类 强引用、软引用、弱引用、幻象引用 这四种引用有什么区别?         不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响 。         所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象

Github: https://github.com/jcxzzy 掘金:https://juejin.cn/user/879249395028558 205

java 引用 定义_Java中引用的详解

不同的引用引用实际上是有好几种的,就如我们在java.lang.ref包中看到的那样,再加上强引用,有4种引用类型:强(Strong)、软(Soft)、弱(Weak)、幻象(Phantom),引用依次从强到弱。接下来,就看看其他的引用。软引用(Soft Reference)软引用,跟弱引用功能挺像的。但是软引用指向的对象一般会比弱引用的存活时间长一些,直到内存空间不够时,才会被垃圾回收。一个Wea...

weixin_35060159的博客 382

Java基础04

记录学习04 强引用、软引用、弱引用、幻象引用有什么区别? 回答 在 Java 语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握 Java 对象生命周期和 JVM 内部相关机制非常有帮助。 所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就

weixin_44726516的博客 136

Java里强引用、软引用、弱引用、幻引用区别总结

在Java中,引用类型决定了对象的生命周期以及垃圾收集器如何处理这些对象。这里有四种引用类型:强引用、软引用、弱引用和幻象引用(也称虚引用)。这四种引用类型提供了不同程度的控制,使得开发人员能够更精细地管理对象的生命周期和内存使用。

小小默:进无止境 1644

Java 面试题:强引用、软引用、弱引用、幻象引用有什么区别?

在 Java 中,理解不同类型引用的区别对于掌握内存管理和垃圾回收机制是至关重要的。强引用、软引用、弱引用和幻象引用分别提供了不同的对象引用强度,使开发者能够精细控制对象的生命周期和内存使用情况。 强引用(Strong Reference)是 Java 中最常见的引用类型。当一个对象被一个强引用所引用时,垃圾回收器永远不会回收该对象,即使内存不足,JVM 也会抛出 OutOfMemoryError,而不会回收此对象。 软引用(Soft Reference)在内存不足时会被垃圾回收器回收。它非常适合用来实

栗筝i的博客 3256

软引用和弱引用的区别_深入解析强引用、软引用、弱引用、幻象引用

关于强引用、软引用、弱引用、幻象引用的区别,在一些大公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用。在java语言中,除了原始数据类型(boolean、byte、short、char、int、float、double、long)的变量,其他所有都是所谓的引用类型,指向各种不同的对象。理解这些引用的区别,对于掌握jav...

weixin_39788572的博客 3075

Java强引用、软引用、弱引用、虚引用有什么区别?

在 Java 语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握 Java 对象生命周期和 JVM 内部相关机制非常有帮助。 在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。 强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么? 典型回答 1.强引用 特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用

小朱小朱绝不认输的博客 4196

【Java面试笔记:基础】4.强引用、软引用、弱引用、幻象引用有什么区别?

引用类型回收条件典型场景是否可获取对象实现类强引用永不回收(除非无强引用)普通对象创建是无(默认)软引用内存不足时回收缓存是(可能为null弱引用任何GC发生时回收键、监听器是(可能为null幻象引用对象被回收后触发通知资源清理跟踪否(始终null。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 868
假亦真时真亦假
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值