JAVA大白话之强引用、软引用、弱引用、虚引用

现在才发现,在学校里学的每一个一带而过的小知识点原来都大有文章,值得好好研究呀~
在这里插入图片描述

强引用:

只要某个对象有强引用与之关联、JVM必定不对回收这个对象,即使在JVM内存不足的情况下,JVM宁愿抛出OutOfMemory异常也不会回收对象
我们平时写的创建对象就是强引用、下面来看这个经典小例子

public void test() {
	List<String> list = new ArrayList<String>();
	String str = "S1amDuncan";
	Object[] abjArray = new Object[1000000000];
}

当程序调用test()方法时,虚拟机在内存分配两块空间,栈里存放三个引用型变量(存放对象在堆内存的地址),list、str、abjArray,堆里存放真正对象数据,
给list、str所引用的对象分配内存没有问题,到给abjArray所引用的对象分配内存时内存溢出,直接报错,阻断程序

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at reference.LearnReference.test(LearnReference.java:52)
	at reference.LearnReference.main(LearnReference.java:45)

list、str、abjArray都是局部变量,在test()方法执行结束后就消失了,堆中的对象就会失去引用而被JVM回收。
我们也可以将引用变量 = null,中断强引用和堆中对象之间的引用关系,JVM会在合适的时候回收该对象内存。

软引用(java.lang.ref.softReference):

对于弱引用关联着的对象,只有在内存不足的时候JVM才会回收该对象,可以用来解决OOM(OutOfMemory)问题、如网页缓存、图片缓存等

软引用可以和一个**引用队列(ReferenceQueue)**联合使用,如果软引用所引用对象被JVM回收,那么这个软引用就会被加入到与之关联的引用队列中。

Java分布式事务是指在分布式系统中,多个独立的服务或应用之间进行数据操作时,保证数据的一致性和可靠性的一种机制。简单来说,就是多个服务或应用在进行数据操作时,要么全部成功,要么全部失败,不会出现部分成功部分失败的情况。 在分布式系统中,每个服务或应用都有自己的数据库,它们之间需要进行数据的读取和写入。当多个服务或应用同时进行数据操作时,可能会出现以下问题: 1. 数据不一致:由于网络延迟或其他原因,某个服务或应用的数据操作成功了,但其他服务或应用的数据操作失败了,导致数据不一致。 2. 并发冲突:多个服务或应用同时对同一份数据进行读写操作,可能会导致数据冲突和错误。 为了解决这些问题,Java分布式事务引入了一些机制和技术,例如: 1. 两阶段提交(Two-Phase Commit):在分布式事务中,引入一个协调者(Coordinator)来协调各个参与者(Participant)的数据操作。在第一阶段,协调者询问各个参与者是否可以提交事务;在第二阶段,如果所有参与者都同意提交,则协调者通知各个参与者提交事务;如果有任何一个参与者不同意提交,则协调者通知各个参与者回滚事务。 2. 分布式事务消息:使用消息队列来实现分布式事务,将数据操作和消息发送放在同一个事务中,保证数据和消息的一致性。 3. 分布式锁:通过分布式锁来控制对共享资源的访问,保证在同一时间只有一个服务或应用可以对资源进行操作,避免并发冲突。 以上是对Java分布式事务的简单介绍,希望能帮到你。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值