草庐IT

java - 所有这些默认线程都应该运行吗?它们能让我的 JVM 保持活力吗?

coder 2024-03-12 原文

我对我的应用程序在执行期间生成的线程及其状态有疑问。

我有一个 Swing 应用程序,我注意到在某些测试场景中使用 Java VisualVM 时出现了一些奇怪的行为。无所事事地运行我的程序 30 多分钟(刚开始并让它继续运行)我注意到以下内容。

首先,在“线程”选项卡中,我看到很多 Activity 线程。

阅读(除其他外) Default threads like, DestroyJavaVM, Reference Handler, Signal DispatcherWhat are these threads which are spwaned when a Java application begins its execution?我知道这些线程中的大多数都有很好的理由存在。 (我仍在尝试找出“RMI TCP”)
但是我对他们的状态有疑问。前六个100%的时间都处于Running状态正常吗?

此外,这些线程中的任何一个都可以解释如下所示的堆消耗吗?

我注意到很多 HashMap$Entry 和 TreeMap$Entry 的实例都是由源自 sun.rmi.* 的库引用和创建的,我认为这可能与“RMI TCP”线程有关...

最后但同样重要的是,如果我尝试对我的主 JFrame 进行 dispose() 处理,框架本身将消失,但应用程序仍将运行....这些线程可能是原因(或部分原因)吗?

谢谢大家

最佳答案

I am still trying to figure out the "RMI TCP" ones

这些线程用于通过 RMI 接受和处理 JMX 连接。在查看 JVisualVM 时,您现在正在使用一个。你注意到工作线程名称中的 IP 了吗?

I have doubts however on their state. Is it normal that the first six of them have been in Running state 100% of time?

仅仅因为线程是可运行的,并不意味着它正在运行并消耗 CPU 时间。引用 Thread.State :

  • NEW - A thread that has not yet started is in this state.

  • RUNNABLE - A thread executing in the Java virtual machine is in this state.

  • BLOCKED - A thread that is blocked waiting for a monitor lock is in this state.

  • WAITING - A thread that is waiting indefinitely for another thread to perform a particular action is in this state.

  • TIMED_WAITING - A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.

  • TERMINATED - A thread that has exited is in this state.

如你所见,这个列表没有提到像套接字一样等待 I/O。执行此任务的线程仍标记为可运行。显然等待数据不消耗任何CPU。此外,接受连接的线程可运行,但它什么也不做。它会在客户端尝试建立新连接时被唤醒。

Also, could any of these threads explain a heap consumption like the following?

您的堆消耗正常且健康。锯齿形状是由垃圾收集删除不再需要的对象引起的。 JVM 还发现您的堆消耗非常稳定,因此它不断减小最大堆大小,因为它认为您不需要那么多(橙色图)。

Last but not least, if I try to dispose() my main JFrame, the frame itself will desappear, but the application will still be running....could those threads be the reason (or part of it)??

那是因为您只是关闭了一个 JFrame,而不是整个应用程序。 Swing EDT ( event dispatching thread ) 仍在运行。但这与它无关。只需使用:

jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

在你的主机上。

长话短说

如果考虑线程和内存消耗,您的应用程序完全没问题。别担心!

另见

关于java - 所有这些默认线程都应该运行吗?它们能让我的 JVM 保持活力吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208537/

有关java - 所有这些默认线程都应该运行吗?它们能让我的 JVM 保持活力吗?的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  9. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  10. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

随机推荐