首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【JVM】如何理解强引用、软引用、弱引用、虚引用?

强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。...弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。...不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。...如何使用 拿上面介绍的场景举例,我们使用一个指向Product对象的弱引用对象来作为HashMap的key,只需这样定义这个弱引用对象: Product productA = new Product(....虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。

1.2K10

Android中检测当前是否为主线程

如果在Android中判断某个线程是否是主线程?对于这个问题,你可能说根据线程的名字,当然这个可以解决问题,但是这样是最可靠的么?万一某天Google一下子将线程的名字改称其他神马东西呢。...通过这个方法,主线程的looper被创建,并且将对象引用传递给sMainLooper。所以保证了主线程myLooper()获取到的引用和getMainLooper()获取到的都是同一个引用。...对于没有消息循环的非主线程,默认的当前线程的looper是null,因为你从来没有手动地调用prepare(),所以它和主线程的looper不一样。...对于绑定了消息循环的非主线程,当调用Looper.prepare方法时,主线程的Looper已经由Android运行环境创建,当调用prepare方法后,绑定到这个非主线程的looper被创建,当然,这不可能和主线程的...引用: http://developer.android.com/reference/android/os/Looper.html http://grepcode.com/file/repository.grepcode.com

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

    JVM问题定位 | 查看当前线程信息,查看线程的堆栈?

    所以看看arthas的功能,好用就用它了 cpu使用率是如何统计出来的?...这里的cpu使用率与linux 命令top-H-p的线程%CPU类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。...使用参考 当前最忙的前N个线程并打印堆栈: 没有线程ID,包含[Internal]表示为JVM内部线程,参考dashboard命令的介绍。...- thread –all, 显示所有匹配的线程 显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。...- thread id, 显示指定线程的运行堆栈 - thread -b, 找出当前阻塞其他线程的线程 有时候我们发现应用卡住了, 通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。

    3.2K20

    如何理解符号引用和直接引用?

    4.解析解析阶段是 Java 虚拟机将常量池内的符号引用替换为直接引用的过程,也就是初始化常量的过程。...直接引用:一种可以直接指向目标对象、类、字段或者方法在 JVM 内存中的物理位置的引用方式,例如指针、偏移量等。一旦有了直接引用,就可以直接访问目标实体,而无需再经过其他查找过程。...比如,当一个类引用了另一个类的方法或字段时,解析阶段会确保被引用的目标类已经被加载,并计算出被引用方法或字段在内存中的准确位置,然后用这个位置信息替换掉原来的符号引用。...那么问题来了,以上步骤中在进行【解析】阶段时有两个比较难理解的定义【直接引用】和【符号引用】,那么如何通俗易懂的理解二者的概念呢?...符号引用 VS 直接引用这里通俗易懂的理解一下符号引用和直接引用:符号引用:想象一下你去图书馆找一本书,但你没有具体的书架位置,只有书名和作者,这是书名和作者就像是符号引用,你并不知道它在图书馆的哪个位置

    10710

    【JavaEE】——多线程(join阻塞,计算,引用,状态)

    但是如果不清楚其他线程何时结束,就不能使用sleep方法了 一:join等待线程结束 1:知识回顾 (1)多线程的调度是无序的(随机调度,抢占式执行) (2)可以通过操作系统提供的一系列api来控制线程的执行顺序...,我需要等待t1线程执行完毕,才能进行打印"); } } 二:多线程运行计算 1:情景引入 问题:我们用单线程和多线程去计算前1_0000_0000个数字之和,看两者速度差多少 2:多线程提升进程的运行效率...,在进行第二个线程,最后执行main函数 三:获取线程的引用 1:Thread.currentThread(): 获取到当前线程的引用(Thread引用) 2:创建线程方式影响this引用 如果继承的是...Thread类,那么可以用this拿到线程的引用 如果是Runnable或者lambda的方式创建线程,this不能指向Thread对象了,那么此时this就不可以用了,就只能使用Thread.currentThread...this了 *lambda中没有指向任何对象,this没法用 * Runnable写法则是this指向的是Runnable * 所以只能用.currentThread这个方法来获取当前

    6510

    Android开发:当前项目以Module形式引用别的项目的步骤

    前言 在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。...所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开发者查阅使用。...举例说明,之前开发的项目,需要引用蓝牙的方法,就直接把另外一个项目的蓝牙部分做成一个demo然后直接以Module形式引用到当前项目里面。...那么本篇博文就来介绍一下具体的引用方法的步骤,以备方便以后使用。...步骤 一、在当前项目里面导入,Import Module… [1240] 二、选择文件目录并选择需要导入的文件 [1240] 三、根据实际情况修改Module名称,如果没有重名可以不修改;而且需要勾选右侧的

    40640
    领券