java - 静态方法中的 TimerTask 在执行之前会被垃圾收集吗?
问题描述
假设我有一个像这样的静态方法:
public static void doSomething() {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
something();
}
};
timer.schedule(task, 1000);
}
当函数返回时,不再引用计时器或任务。在允许任务运行之前,它们是否可能被垃圾收集?如果不是,为什么?
解决方案
您的匿名TimerTask
实例引用了run()
. 这意味着如果其中使用的所有对象run()
都被 GC,那么 TimerTask 实例也可以被 GC。
您可以打开一个调试器TimerTask
并查看它是否引用了run()
.
更多信息在这里 匿名类*总是*维护对其封闭实例的引用吗?
简而言之:GC 不会收集任何仍在使用的对象。
推荐阅读
- c# - 如何在日历控件中预先选择多个月份 - WPF
- css - 如何将 v-btn 与 v-expansion-panels 放在同一行?
- angular - CloudFront 上用于 Angular 应用程序的“NoSuchKey”代码
- ruby - 通过并行分配迭代哈希列表
- r - R & ggplot2 - 如何用二进制变量绘制分类分割的相对频率
- postgresql - 将动态数量的参数传递给函数的数组错误
- database - 获取两个日期之间的 HQL 查询记录
- objective-c - WKWebview:点击应用中的按钮,直接播放嵌入的Youtube视频
- kotlin - Mockk:如何在延迟后模拟返回?
- java - 从本地 spark-submit 检查远程 HDFS 上是否存在文件