记0513JVM学习笔记,新建对象的操作以及四种引用

StringBuffer str = new StringBuffer(“hello world”);
str分配在栈内 对象StringBuffer分配在堆上,str指向Stringbuffer实例所在的堆空间,通过str可操作该实例,此时如若 StringBuffer str1 = str,那么str所指向的对象也会被str1指向,此时stringbuffer就有两个引用,而对引用使用“==”来判断的是两个操作数所指向的堆空间地址是否相同,不表示两个操作数所指向的对象是否相等。

强引用:

在一个线程内无需银用直接可以使用的对象,除非银用不存在了,否则强引用不会被GC清理,我们平时用的99%都是强引用,如:String s= “helloworld”

软引用:

JVM在抛出OOM之前,GC会清理所有的软引用对象,垃圾回收器在某个时刻决定回收软可达的对象的时候,会清理软引用并可选地把引用存放到一个引用队列。类似弱引用,只不过java虚拟机会尽量让软引用存活的时间长一些,迫不得已才清理。

弱引用:

弱引用对象与软引用对象的最大不同在于,当GC在进行回收时,需要通过算法检查是否回收软引用对象,而对于弱引用对象,GC总是进行回收。弱引用对象更容易、更快被GC回收,虽然GC在运行时一定回收弱引用对象,但是复杂关系的若对象群常常需要好几次GC运行才能完成,弱引用对象常常用于Map结构中

虚引用:

又称为幽灵引用,主要目的是在一个对象所占的内存被实际回收之前得到通知从而可以进行一些相关的清理工作。幽灵引用在使用方式上与之前介绍的三种引用类型有很大的不同。首先幽灵引用在创建时必须提供一个引用队列作为参数,其次幽灵引用对象的get方法总是返回null,因此无法通过幽灵引用来获取被引用的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值