Java中的线程何时从内存中删除? [复制]

2024-03-25

来自 Java API 文档:

Java虚拟机继续执行线程,直到遵循 发生:

所有非守护线程的线程都已死亡,或者通过返回 从调用 run 方法或抛出异常 传播到 run 方法之外。

我希望我的假设是正确的,一旦线程完成它的run()方法它变得有资格进行垃圾收集。在同样的背景下,我只是想知道:

  1. 如果返回后不符合垃圾回收条件 从run(),应该将其引用设置为null要做到这一点?
  2. 有资格进行垃圾收集并不一定意味着 该对象将从内存中删除。由以下人员自行决定: 垃圾收集时的底层操作系统/JVM。 但是如何确保(通过 Java 程序或外部工具)该对象已完全从 记忆?
  3. 如果一个线程一旦完成其 run() 方法就被认为是死亡的,为什么 我还能执行吗isAlive() or getState()在 相同的线程对象?两个电话均返回false and RUNNABLE分别。

The Thread类是本机内存中真实线程的代理。

我希望我的假设是正确的,一旦线程完成其 run() 方法,它就有资格进行垃圾收集。

run()之后实际上还有一段代码,这段代码处理未捕获的异常。

一旦线程终止,其本机内存和堆栈将立即释放,无需 GC。但是,那Thread对象就像任何其他对象一样,它会一直存在,直到 GC 决定它可以释放为止,例如没有强有力的参考。

类似地,FileOutputStream 是操作系统中文件的代理。即使文件已被删除,您仍然可以引用该对象close()甚至删除。

如果从 run() 返回后它不符合垃圾回收的条件,是否应该将其引用设置为 null 来执行此操作?

您很少需要在任何地方执行此操作。事实上,一开始就不保留对线程的引用,或者使用 ExecutorService 来管理线程通常更简单。

当我有一个对象时Thread字段 当线程死亡时,我经常让这个对象死亡,因此该字段不需要nulled out.

我还使用用于 Fork/Join 的内置线程池。这是在后台线程中执行任务的一种更轻量级的方法,因为它不会创建和销毁太多线程。

ExecutorService fjp = ForkJoinPool.commonPool();

符合垃圾回收条件并不一定意味着该对象将从内存中删除。垃圾收集时由底层操作系统/JVM 自行决定。但是如何确保(通过 Java 程序或外部工具)该对象已完全从内存中删除呢?

你不能也不应该尝试。 GC 将在需要时清理资源。

如果一个线程一旦完成其 run() 方法就被认为是死亡的,为什么我仍然能够在同一个线程对象上执行 isAlive() 或 getState() ?两个调用分别返回 false 和 RUNNABLE。

线程对象就像任何其他对象一样。只要您持有对它的引用,就可以调用它的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中的线程何时从内存中删除? [复制] 的相关文章

  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https

随机推荐

  • 如何在 C# 中模拟没有接口和虚方法的类?

    我正在为别人的代码编写单元测试 但我不允许修改这些代码 假设我有 class BadClass public BadClass the service isn t going to be running during testing it
  • 颤振扩展图块删除尾随

    我有一个 exoansiontile 我希望它像一个盒子 一切都居中 问题是 如果我添加太长的文本 我会收到溢出错误 我认为这是由扩展图块的尾随引起的 这是一张图片 https gyazo com c29329106dc5dcb162b71
  • Java .policy 文件 - 如何防止 java.util.Date() 被访问

    我正在摆弄 java policy 文件 并想知道如何做一些事情 例如阻止调用 java util Date 我只是想更好地了解 policy 文件的工作原理以及如何将其用于沙箱代码 恐怕你在那里就不走运了 正如帕洛 埃伯曼所说 packa
  • 超多重非虚拟继承中基类的作用域运算符

    考虑这个 完全无意义 但完全有效 类继承 struct Area int size struct Pattern int size struct R Area Pattern struct C Area Pattern struct X R
  • 如何使用 Python 从 Outlook 帐户发送带有附件的邮件

    我已尝试使用以下代码发送附件 但文件未发送 仅发送内容 请帮忙 SERVER smtp example com FROM email protected cdn cgi l email protection TO listOfEmails
  • 隐藏导航栏,但是当我转换到上一个视图(弹出)时,它会暂时显示旧的后退按钮。为什么?

    我在导航控制器中有视图控制器 根 RootViewController 第二 ReadingViewController 但在第二个视图控制器中我想禁用导航栏UIToolBar 因为我不需要标题并想要更多按钮 例如 iBooks 或 Fac
  • 带参数的自定义激活

    我正在尝试在 Keras 中创建一个可以接受参数的激活函数beta像这样 from keras import backend as K from keras utils generic utils import get custom obj
  • Sublime Text 更改“Goto Line...”快捷方式

    这个问题是专门针对Mac的 但如果你愿意的话 你可以启发Windows用户 Goto Line 的命令是什么 用于更改 Goto Definition 的快捷方式 如下所示 keys cmd D command goto definitio
  • “财产价值无效。”为什么 Visual Studio 不允许我将图片分配给图像?

    在 WPF 窗口上我有一个图像对象 我单击按钮分配源 弹出窗口 我在其中添加了图像 单击添加 当图像加载时 它没有显示图像 而是显示一个白色框 我尝试将这个白框指定为图像源 它只是说 属性值无效 解决方案资源管理器清楚地显示图像在那里 我可
  • 无法将mysql驱动添加到jboss

    好吧 这让我发疯 特别是因为已经有很多类似的问题了 但没有答案对我有用 我的 Windows 7 机器上有 jboss 7 1 1 通常从 eclipse 运行它 并且想要使用 mysql 我做了以下事情 1个创建的目录jboss as 7
  • 使用 pandas 数据框的 Seaborn 热图

    我正在努力将 pandas 中的数据帧调整为 Seaborn 热图 或实际上是 matplotlib 的正确格式以制作热图 我当前的数据框 称为 data yule 是 Unnamed 0 SymmetricDivision test Mu
  • 如何将 jQuery 变量传递给 PHP 变量?

    如何在不刷新页面的情况下将变量从 jQuery 传递到 PHP 当我单击一个复选框时 我想将一个变量从 jQuery 传递到 PHP 我也在使用formdialog 我的 PHP 代码 gt gt 我的 JavaScript 代码 func
  • '/usr/include/c++/4.4/bits/' 中的位的含义是什么

    usr include c 4 4 bits 中的位的含义是什么 Linux 当然是 gcc 根据 libstdc 文档 该文件夹的官方名称是 标准标头包含的文件 以及位中的其他文件 目录 其中 位 可能只是意味着一些微不足道的东西 例如
  • Angular 2 在 iframe 内触发插值

    我想在 iframe 中显示模板化网页的内容 但加载内容后 模板不会按角度进行插值 是因为变化检测系统吗 可以通过其他方式实现吗 Component selector my app template export class App tem
  • ViewState 仅在 Safari 中无效

    我维护的网站之一很大程度上依赖于使用ViewState 这不是我的代码 但是 在某些页面上ViewState过于臃肿 Safari 会抛出一个 Validation of viewstate MAC failed error 这似乎只发生在
  • 使用Python的CGI表单提交按钮

    我正在尝试创建一个cgi 表单 允许用户输入一个单词 然后它将获取该单词并将其发送到下一页 另一个cgi 我知道如何使用 html 文件来做到这一点 但是当涉及到使用 python cgi 时 我迷失了 这是我需要做的 但它是 html 格
  • 为什么我的通知图标在 Oreo 中无法正确显示?

    很长一段时间以来 我们的应用程序中都有通知 效果很好 我有一个小的 彩色的 png 图标 用于它们 过去运行良好 在奥利奥中 该图标无法正常显示 它只是一个灰色的方块 查看设备上的抽屉 似乎系统 gmail 等现在都有单色图标 因此我怀疑与
  • 如何为 MAC OS X 安装 libgluezilla

    我正在尝试在具有嵌入式 Web 浏览器控件的 Mac 上运行 Mono 应用程序 程序运行 但现在显示浏览器并输出一条消息 未找到 libgluezilla 要获得网络浏览器支持 您需要安装 libgluezilla 我已经搜索过 但不知道
  • 寻找多条短路径的算法

    寻求一种能够产生 N 条短路径的算法 有没有人有算法的经验来寻找多条短路径在有向图中 我的应用程序用于语言 查找同义词链 但从逻辑上讲 这可能用于地理或社交网络 我想要明显不同的路径 而不仅仅是沿途交换几个节点 我真的很想知道是否有办法避免
  • Java中的线程何时从内存中删除? [复制]

    这个问题在这里已经有答案了 来自 Java API 文档 Java虚拟机继续执行线程 直到遵循 发生 所有非守护线程的线程都已死亡 或者通过返回 从调用 run 方法或抛出异常 传播到 run 方法之外 我希望我的假设是正确的 一旦线程完成