首页
学习
活动
专区
工具
TVP
发布

JAVA加载过程&主动引用和被动引用

文章目录 1.java加载过程 1.1加载 1.2 链接 1.3 初始化 *说明 与方法 1.4 使用 1.5 卸载 2.被动引用和主动引用 2.1主动引用 2.1.1.遇到new、getstatic...2.1.4.当虚拟机启动时,用户需要指定一个执行的主,虚拟机会首先初始化这个主 2.2被动引用 2.2.1.通过子类引用的静态字段,不会导致子类初始化 2.2.2.通过数组定义来引用,不会触发此类的初始化...4.二进制兼容性验证:确保相互引用之间的协调一致。...例如在Worker的gotoWork()方法中会引用Car的run()方法。...2.被动引用和主动引用 在java虚拟机规范中,严格规定了,只有对进行主动引用,才会触发其初始化方法。而除此之外的引用方式称之为被动引用,不会触发的初始化方法。

92021

Android无引用查找插件

在排查项目中的代码垃圾时,处理无引用是最简单直接的,因为没有其他代码引用到它,直接删除也不会影响到项目。...但靠人肉去检索项目中所有的是否有引用又显得是重复低效的,所以在这里提供一个方案,做成gradle插件供大家参考。...当然,查找无引用并不需要修改class,只是需要在这个时机上获取到所有Module编译后生成的.class文件。...此时,只需要遍历一下allClasses,若某些不在dependentClasses上则说明该类有可能是无引用的,所以在得到扫描结果后,需要检查下是否真的无引用。为什么是可能呢?...因为: 某些可能只有在xml里有引用(如AndroidManifest、layout资源等),只通过class分析没有找出xml的引用; 只用作基本类型常量使用的,编译时不会把class给import

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

引用数据类型分为哪三_都是引用数据类型吗

大家好,又见面了,我是你们的朋友全栈君 Java引用数据类型(String) 引用数据类型概述 引用数据类型与基本数据类型的差别(举例说明) 引用数据类型概述 说到引用数据类型,那么何为引用数据类型?...引用类型,都可以用null值作为值,也就是说可以在初始化的时候赋值为null,String是引用类型,也就是说可以使用null作为值。...引用数据类型与基本数据类型的差别(举例说明) 使用基本数据类型: int i1 = 1 int i2 = 1 这种是会在内存中存储两个1的值 但是,使用引用类型就不会!...假设”hello”的内存地址为xxxxxx,声明s变量时给s赋值”hello”实际上让s变量引用”hello”的内存地址xxxxxx; 当我们再次声明变量s1也赋值为”hello”的时候实际上也是直接把已经存在的...”hello”的内存地址给了s1引用 此乃引用类型和基本数据类型的区别。

65820

【C++】结构体、引用

注:最后有面试挑战,看看自己掌握了吗 文章目录 结构体和 构造函数 析构函数 this指针 的继承 虚函数与多态性、纯虚函数 虚函数与多态 纯虚函数 覆盖和隐藏 引用 C++的设计习惯及头文件包含问题...结构体和 C++结构体中可以有函数。...>()=0; … }; 在许多情况下,在基中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基的派生去做。...覆盖和隐藏 隐藏:当父函数与派生函数同名,并且父函数无 virtual关键字修饰,无论父与派生参数个数与类型是否相同,此时派生函数隐藏父所有同名函数 覆写:当父函数与派生函数同名...,并且参数相同,返回值相同,并且父函数有 virtual关键字修饰,此时派生函数覆写父函数 引用 引用会使用同一块地址 常用于传参--------------节省空间,也更直观 int a=5

79310

Roslyn 如何获得一个引用

本文告诉大家如何在 Rosyln 编译一个文件,获得这个文件的的命名空间 在 C# 代码里面,大部分的代码都是在开始定义了 using 引用命名空间,本文将告诉大家如何使用 Roslyn 分析获取文件里面引用的命名空间...在读取出来了语法树,还需要编写分析的代码,分析代码的方法就是编写一个继承 CSharpSyntaxWalker 的用来作为分析的辅助 按照约定,咱编写 ModelCollector ,代码如下...使用继承 CSharpSyntaxWalker 的作为辅助,通过访问者模式的方法去读取,就是 Roslyn 开发推荐的方法 调用 Visit 方法就可以开始进行语法分析,或者进行语法修改添加代码等...但是 ModelCollector 还没有任何的代码,期望获取当前文件的 using 引用文件,可以通过在 ModelCollector 重写 VisitUsingDirective 方法的方式获取...base.VisitUsingDirective(node); } } 以上的 VisitUsingDirective 方法将会在每一次的 using 进入时被调用,也只有是作为命名空间引用

1.2K20

Java引用类型:强引用,软引用,弱引用,虚引用

在Java中提供了4个级别的引用:强引用,软引用,弱引用,虚引用。在这4个引用级别中,只有强引用FinalReference是包内可见,其他3中引用类型均为public,可以在应用程序中直接使用。...强引用 Java中的引用,有点像C++的指针,通过引用,可以对堆中的对象进行操作。...强引用具备一下特点: 强引用可以直接访问目标对象 强引用所指向的对象在任何时候不会被系统回收,JVM宁愿抛出OOM异常,也不回收强引用所指向的对象 强引用可能导致内存泄漏 所以当我们在使用强引用创建对象时...软引用引用是除强引用外,最强的引用类型。...弱引用引用时一种比软引用较弱的引用类型。

2.1K31

【小家java】引用类型(强引用、软引用、弱引用、虚引用

1、概述 本文不论述java中值传递和引用传递之间的问题(有需求的可移步理解java中值传递和引用传递),而重点讨论Java中提供了4个级别的引用:强应用、软引用、弱引用和虚引用。...super T> q) { super(referent, q); } } 从定义中可以看出,只有一个构造函数。...重点是:它是非public的哦,因此我们并不能在外部调用此构造函数来create一个强引用呢。这得益于JVM的设计,各位看官可以想想为什么呢?...在 JDK 1.2 之后,提供了 SoftReference 可以让调用者创建一个软引用。软引用可用来实现内存敏感的高速缓存。...一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference所提供的get()方法返回Java对象的强引用 先看一个最简单的使用

2K40

Java中弱引用、软引用、虚引用、强引用、 Finalizer引用

引用(Soft Reference)    实现为:SoftReference。...(Weak Reference):    实现为:WeakReference。...任何只要实现了Object里的finalize方法,JVM在初使化这个对象的时候(调用构造方法的时候),会构造一个Finalizer对象,通过调用Finalizer的register方法,代码如下:...何时被加入到ReferenceQueue里   当gc发生的时候,gc算法会判断对象是不是只被Finalizer引用,如果这个仅仅被Finalizer对象引用的时候,说明这个对象在不久的将来会被回收了现在可以执行它的...finalize方法了,于是会将这个Finalizer对象放到Finalizer的ReferenceQueue里,但是这个f对象其实并没有被回收,因为Finalizer这个还对他们持有引用,在gc

2K30

【说站】java的两种引用方法

java的两种引用方法 1、的主动引用,一定会发生的初始化。...,则先会初始化它的父 2、的被动引用,不会发生的初始化 当访问一个静态域时,只有真正声明这个域的才会被初始化。...如:当通过子类引用的静态变量,不会导致子类初始化 通过数组定义引用,不会触发此类的初始化 引用常量不会触发此类的初始化(常量在链接阶段就存入调用的常量池中了) 实例 package com.volcano.reflection...(Father.a);//两个都是只加载Father         //System.out.println(Son.a);//因为a是Father的静态成员         //7.通过数组定义引用... Father{     static {         System.out.println("Son被加载");     }     static int c=200;   } 以上就是java的两种引用方法

43420

Java——引用传递实例分析(进阶分析、对象比较、的关联实现)

1、引用传递进阶分析 引用传递是Java的精髓所在,也是初学者比较难学的地方。下面通过三个程序进行分析。...需要两个数据库表;以上进行的设计,实际也需要两个:Person、Car,可以发现两者的关联: 表名称 = 名称; 表的字段 = 类属性; 表的一行记录 = 一个实例化对象; 表的多行记录 = 对象数组...; 表的外键关系 = 引用设置; 所以,正是因为有这样的匹配关系,所以在实际开发中,简单java不是凭空设计的,往往要与数据表的结构一一对应。...引用的关系,可以描述不同类之间的关联。...4、总结 不要把程序当成纯粹的程序; 引用传递除了进行数据分析外,还要掌握的联系使用; 代码链的使用必须掌握

85920

什么是强引用、软引用、弱引用、虚引用

什么是强引用、软引用、弱引用、虚引用? 强引用(StrongReference):一般指的是对像被new出来,强引用一般不会被jvm收回,但会报OutOfMemory(内存不足)。...Object obj = new Object(); 软引用(SoftReference):软引用相对来说弱于强引用,当内存足够的时候不会被GC回收,但内存不足时,再试图回收软引用,通过软引用可以做临时缓存...(PhantomReference):这个引用也有人叫幻引用,也很明显,引用一个不存在,随时会被干掉,算是所有引用中最容易被干掉的。...引用类型 GC策略 简介 强引用(StrongReference) 永远不会回收(GC ROOT可引用到的前提下) 最基本的引用Object obj=new Object() 软引用(SoftReference...4种引用强度从高到低:强引用 -> 软引用 -> 弱引用 -> 虚引用 最后 不管哪种引用,在开发过程中,都是尽量减少强引用,毕竟内存有限,虽然说放到内存可以提升用户访问效率,但是这也是一把双刃剑,

1.6K10

Java的强引用、软引用、弱引用、虚引用

它底层实现和API接口上使用了强引用、软引用、弱引用。所以温故知新下,也夯实下基础。...下一次GC,这中间产生的软引用对象也都被回收了。 ? 最终,由于GC及时,整个过程没有爆发OOM,平安的结束了。 ? 虚引用引用也叫幻影引用。任何时候可能被GC回收,就像没有引用一样。...并且他必须和引用队列一起使用,用于跟踪垃圾回收过程,当垃圾回收器回收一个持有虚引用的对象时,在回收对象后,将这个虚引用对象加入到引用队列中,用来通知应用程序垃圾的回收情况。...Java的Unsafe和NIO都可以直接访问堆外内存。堆外内存GC管不了,这时候虚引用就排上用场了。我们可以通过引用队列跟踪垃圾回收,做好善后。...总结 Java的强软弱虚引用被回收的时机不同:强引用引用被释放才会回收;软引用是没释放,但是快OOM了就会被回收;弱引用引用没释放,但是发生了GC后就会被回收;虚引用随时会回收,好像没有存在过,但是会有一个队列来跟踪它的垃圾回收情况

2K31

引用、软引用、弱引用、虚引用的对比

引用、软引用、弱引用、虚引用 从Jdk1.2开始,在java.lang.ref包下就提供了三个:SoftReference(软引用),PhantomReference(虚引用)和WeakReference...(弱引用),它们分别代表了系统对对象的中的三种引用方式:软引用,虚引用以及弱引用。...因此java语言对对象的引用有如下四种: 强引用:就是正常的引用。...2 软引用和弱引用的区别 弱引用不会影响GC的清理,也就是说当GC检测到一个对象存在弱引用也会直接标记为可清理对象,而软引用只有在内存告罄的时候才会被清理 3 弱引用和虚引用的区别 说两者的区别之前要说一下...弱引用和虚引用的区别就在于被加入队列的条件不同,这里主要侧重于考虑对象所属的重写了finalize方法,将对象的状态归纳为三种:finalizable, finalized、reclaimed,分别代表

2K20

Java 的强引用、弱引用、软引用、虚引用

Java四种引用包括强引用,软引用,弱引用,虚引用。...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。...虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。...也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference所提供的get()方法返回Java对象的强引用

1.4K10

【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )

文章目录 一、 Java 引用类型 ( 强、软、弱、虚 ) 二、 软引用代码示例 三、 弱引用代码示例 强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必回收 ) >...OutOfMemoryError 异常 ; ③ 弱引用 : 弱引用也是描述非必须对象 , 该引用引用强度比软引用更弱 , 该引用对象 , 生命周期只到下一次 GC 回收之前 , GC 只要扫描到了弱引用..., GC 忽略虚引用 , 即使有虚引用引用某对象 , GC 会当做该引用不存在 ; 开发时不常用 , 一般开发底层 SDK , 或监测系统运行的软件时 , 才使用 ; 强引用 ( 不回收 ) > 软引用...(new Object()); ② 传入创建好的对象引用创建软引用 : 软引用是通过在 软引用构造函数 传入引用对象创建的 , 首先要创建引用对象 ; 下面的强引用可以在创建软引用完毕后置空解除引用...(new Object()); ② 传入创建好的对象引用创建弱引用 : 弱引用是通过在 弱引用构造函数 传入引用对象创建的 , 首先要创建引用对象 ; 下面的强引用可以在创建软引用完毕后置空解除引用

5.1K10

引用和弱引用的区别_强引用引用引用引用的区别

第二次由于分配了较大的内存,导致GC,这时候由于内存资源紧张,软引用被回收了,也就是虽然User对象有一个软引用引用着它,但User对象在此条件下也会被GC回收。...所以软引用的对象在一定条件下可被回收,故软引用对象不会导致内存溢出。...软引用到底有没有被回收,可以通过给软引用一个ReferenceQueue来跟踪,将上面的代码片段稍作修改,如下: import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue...,所以ReferenceQueue为空,第二次GC回收了软引用对象,所以ReferenceQueue队列不为空,那为什么可以强转成UserSoftReference呢?...此处自定义一个UserSoftReference主要是为了跟踪User对象的id,你无法跟踪User对象,因为User对象已经被回收了,如果调用reference.get(),将会返回null。

1.2K10

Java 的强引用、弱引用、软引用、虚引用

1、强引用(StrongReference)         强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。...(int i = 0; i < size; i++) elementData[i] = null; size = 0; }        在ArrayList中定义了一个私有的变量...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...3、弱引用(WeakReference)       弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。...虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。

3.5K30
领券