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中的线程何时从内存中删除? [复制] 的相关文章

  • Java Sqlite Gradle

    我对 gradle 和 java 还很陌生 我有一个使用 sqlite 的项目 它通过 intellij idea 运行良好 但我无法从终端运行它 它会抛出异常 java lang ClassNotFoundException org sq
  • 指纹奇异点检测

    我正在尝试确定指纹的核心点和增量点 我正在使用庞加莱指数方法 但我无法成功检测到这一点 而且我不明白为什么 First I divide the image in 15x15 blocks then I calculate the x an
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • java中队列的实现

    在 Java 中实现队列是一个非常常见的面试问题 我在网上冲浪 看到了许多实现 他们做了一些奇特的事情 比如实现队列接口和编写自己的addLast and removeFirst 方法 我的问题是我不能使用LinkedList 类并使用其预
  • Maven 目标的默认阶段?

    据我了解 在 Maven 中 插件目标可以附加到生命周期阶段 如果没有定义 默认阶段是什么 根据我的经验 这取决于插件的目标 例如 组装 单个 http maven apache org plugins maven assembly plu
  • org.postgresql.util.PSQLException:协议错误。会话设置失败

    我知道这些类型的问题已经存在 但提供的解决方案对我不起作用 在我的应用程序中 没有版本不匹配的黑白驱动程序和 PostgreSQL 服务器 我还没有找到任何其他解决方案 我正在使用 PostgreSQL 服务器 9 4 和 postgres
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • Java 中 static 关键字如何工作?

    我正在阅读Java教程 http docs oracle com javase tutorial index html从一开始我就有一个问题static字段或变量上的关键字 作为Java said here http docs oracle
  • Kerberos 缓存票证

    我使用的是 Windows 7 64 位 我创建了一个简单的应用程序来对实现 PrivilegedAction 的类的 run 方法中的文件进行计数 以下是我的 jaas conf 文件 CountFiles com sun securit
  • NoSuchMethodError:将 Firebase 与应用程序引擎应用程序集成时

    我试图将 firebase 实时数据库与谷歌应用程序引擎应用程序集成 我在调用时收到此错误 gt DatabaseReference ref FirebaseDatabase gt getInstance gt getReference t
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 如何在 Java 中创建要打印到 JFrame 的 JLabels 数组

    我正在尝试制作一系列标签 每个标签都有一个来自函数的不同值 我不知道要使用的标签的确切数量 我的意思是可以打印任意数量的值 请帮我做这件事 很简单 只需一个方法返回一个数组或一些 JLabels 集合 并将它们全部添加到您的 JCompon
  • 在 netBeans 中运行程序时,字体看起来非常奇怪

    我在我的新 MacBook M1 上设置了 netBeans 和 SceneBuilder 除了运行程序时的字体外 一切正常 它看起来像这样 我不知道为什么 按钮应显示 Click me 标签应显示 Hello 我收到的错误消息是 M rz
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • 在多线程环境中,Collections.sort 方法有时会抛出 ConcurrentModificationException。列表没有进行结构性修改

    package CollectionsTS import java util ArrayList import java util Collections import java util HashSet import java util

随机推荐

  • 如何在 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 方法之外 我希望我的假设是正确的 一旦线程完成