`
younglibin
  • 浏览: 1207705 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

查看当前jvm运行的线程

阅读更多

参考: http://blog.csdn.net/defonds/article/details/4848853

 

 

 

查看当前 jvm有那写线程在执行, 代码如下,  另外附件给了 个jar包,可以直接运行

 

java -jar  findThrea-client.jar

运行结果如下: 写道
current threadName [Reference Handler] priority[10] group[java.lang.ThreadGroup[name=system,maxpri=10]] parentGroup[null]
current threadName [Finalizer] priority[8] group[java.lang.ThreadGroup[name=system,maxpri=10]] parentGroup[null]
current threadName [Signal Dispatcher] priority[9] group[java.lang.ThreadGroup[name=system,maxpri=10]] parentGroup[null]
current threadName [main] priority[5] group[java.lang.ThreadGroup[name=main,maxpri=10]] parentGroup[java.lang.ThreadGroup[name=system,maxpri=10]]

 

 

原码:

 

package com.younglibin;

public class FindThread {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Thread[] slackList = findAllThreads();
		if (null == slackList) {
			System.out.println("current jvm no thread.");
		} else {
			for (Thread t : slackList) {
				System.out
						.println(String
								.format("current threadName [%s] priority[%s] group[%s] parentGroup[%s] ",
										t.getName(), t.getPriority(), t
												.getThreadGroup(), t
												.getThreadGroup().getParent()));
			}
		}
	}

	public static Thread[] findAllThreads() {
		ThreadGroup group = Thread.currentThread().getThreadGroup();
		ThreadGroup topGroup = group;

		// 遍历线程组树,获取根线程组
		while (group != null) {
			topGroup = group;
			group = group.getParent();
		}
		// 激活的线程数加倍
		int estimatedSize = topGroup.activeCount() * 2;
		Thread[] slackList = new Thread[estimatedSize];
		// 获取根线程组的所有线程
		int actualSize = topGroup.enumerate(slackList);
		// copy into a list that is the exact size
		Thread[] list = new Thread[actualSize];
		System.arraycopy(slackList, 0, list, 0, actualSize);
		return list;
	}

}

 

分享到:
评论

相关推荐

    java 查看JVM中所有的线程的活动状况

    本文将详细讲解如何查看JVM中的线程活动情况,并提供相关示例代码。 首先,Java提供了`java.lang.management.ThreadMXBean`接口,它是管理JVM线程的管理接口。通过这个接口,我们可以获取线程的各种信息,包括线程...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    Java作为一种广泛应用于分布式系统开发的编程语言,其内部机制,尤其是JVM对于线程的管理和资源的同步,是确保程序高效、稳定运行的关键。 #### 线程与多线程 线程是操作系统能够进行运算调度的最小单位,它被包含...

    JVM线程状态和Thread.sleep的实现原理探究.pdf

    JVM在创建线程时会分配一个Thread实例,该实例的threadStatus字段保存了线程的当前状态,反映了线程在Java虚拟机中的行为。 在Java虚拟机中,线程状态的转换是严格控制的,每个状态转换都对应于特定的线程行为和...

    JVM线程分析.pdf

    通过查看线程堆栈信息,我们可以了解线程当前的活动,例如哪个线程持有Monitor,哪些线程在等待,以及等待的原因。这有助于我们识别死锁、活锁或资源争抢等问题,并采取相应的解决策略。 总结来说,JVM线程分析主要...

    JVM运行时数据区

    ### JVM运行时数据区详解 #### 一、概述 Java虚拟机(JVM)作为Java程序的运行环境,定义了一系列用于程序执行过程中使用的数据区域。这些数据区域在JVM启动时创建,在JVM退出时销毁。其中一些数据区域是线程独立...

    JVM中的守护线程示例详解

    - 如果将一个正在运行的线程设置为守护线程,其状态会立即改变,不影响当前执行的任务。 如何判断线程是否为守护线程? Java中可以使用`Thread.isDaemon()`方法来检查一个线程是否为守护线程。这个方法返回一个布尔...

    jdk,jvm源码

    堆存储对象实例,方法区存放类信息,程序计数器记录当前线程执行的指令地址,虚拟机栈保存每个方法的局部变量、操作数栈等,本地方法栈为JNI调用的本地方法服务。 3. 指令集:JVM使用一套基于栈的指令集,这些指令...

    Java八股文之JVM与多线程

    Java虚拟机(JVM)是Java程序运行的基础,它提供了执行字节码的环境,确保了跨平台的兼容性。在面试中,JVM和多线程是常见的话题,尤其对于Java开发者来说,理解这两部分至关重要。 1. **JVM内存模型**: JVM内存...

    java进阶提高学习教程-13JVM与多线程.pptx

    其中,堆内存存储对象实例,栈内存存储基本类型和对象引用,方法区存储类信息,本地方法栈服务于Java Native Interface(JNI),程序计数器记录当前线程执行的字节码指令地址。 - **垃圾回收机制**:JVM自动管理内存...

    idea插件JVM内存工具JProfiler11

    一旦启动,JProfiler11将连接到当前运行的JVM实例,实时展示内存使用情况。它的主要功能包括: 1. **内存分配和泄漏检测**:JProfiler11能详细追踪对象的创建、存活和销毁过程,帮助识别内存泄漏。通过查看对象分配...

    【JAVA WEB实用技巧与优化方案】如何排查JVM线程和内存相关问题

    2. **解析javacore**:IBM提供了专门的工具,如`IBM Heap Analyzer`,它可以解析javacore文件,显示当前活动线程的状态,包括阻塞、等待、运行等,以及线程的调用堆栈,帮助我们定位可能的死锁或资源竞争问题。...

    JVM原理.pdf

    JVM运行机制复杂且至关重要,涉及到内存分配、垃圾回收、类加载机制等多个方面。冯立全在分享中重点介绍了JVM运行机制,尤其强调了运行时数据区域的布局、Class文件的结构、字节码技术、类加载机制以及垃圾回收算法...

    jvm 启动过程 JVM 原理

    通过调整JVM参数,我们可以控制堆大小、垃圾收集策略、线程栈大小等,以达到最佳的运行效果。例如,通过-Xms和-Xmx设置堆内存大小,-XX:+UseG1GC选择垃圾收集器等。 总结来说,JVM是Java编程的重要组成部分,它的...

    JVM 完整深入解析.pdf

    ### JVM运行时数据区 #### 程序计数器 程序计数器是当前线程所执行的字节码的行号指示器,是线程私有的内存区域。由于Java是多线程并发执行的,每个线程都需要有一个独立的程序计数器,以便记录线程切换后继续执行...

    jvm-mon基于控制台的JVM监视

    3. **线程状态**:`jvm-mon`可展示当前运行的线程数量及状态,如RUNNABLE、WAITING、TIMED_WAITING等,这对于排查线程阻塞和死锁问题非常有帮助。 4. **类加载统计**:显示已加载的类数量,帮助分析类加载是否正常...

    Tomcat JVM内存设置方法

    - 可以通过访问`http://<host>:<port>/manager/status`页面查看当前JVM内存使用情况。 #### 六、总结 通过上述步骤,您可以有效地调整Tomcat的JVM内存设置,从而提高应用性能和稳定性。请注意,这些设置需要根据...

    gp-jvm-visualvm

    6. **收集和比较快照**:使用"Snapshot"功能,可以记录当前JVM的状态,以便于不同时间点的比较,找出变化趋势。 通过对JVM的深入理解和利用gp-jvm-visualvm这样的工具,开发者不仅可以解决实际遇到的问题,还能提升...

    Sun JVM原理与内存管理

    - **PC 寄存器**:用于存储当前线程正在执行的方法的指令地址。 - **局部变量区**:存放方法参数和局部变量。 - **操作数栈**:用于支持虚拟机中的字节码指令执行。 - **栈帧**:代表一个线程执行的方法。 - **JVM ...

Global site tag (gtag.js) - Google Analytics