background image

2.6.在 Win 环境下,打开一个记事本和一个 WORD 文档:
try {
  Runtime.getRuntime().exec("notepad");
  Runtime.getRuntime().exec("cmd /c start Winword");
}catch(Exception e) {
  e.printStackTrace();
}

2.7.查询当前 SERVER 下所有的线程信息列表情况(这里需要提供两个步骤,首先
要根据任意一个线程获取到顶级线程组的句柄(有关线程的说明,后面专门会有
一篇文章说明),然后通过顶级线程组得到其存在线程信息,进行一份拷贝,给
与遍历):
2.7.1.这里通过当前线程得到顶级线程组信息:
public static ThreadGroup getHeadThreadGroup() {
  Thread t = Thread.currentThread();
  ThreadGroup group = t.getThreadGroup();
  while(group.getParent() != null) {
   group = group.getParent();
  }
  return group;
}
2.7.2.通过得到的顶级线程组,遍历存在的子元素信息(仅仅遍历常用属性):
public static void disAllThread(ThreadGroup threadgroup) {
  Thread list[] = new Thread[threadgroup.activeCount()];
  threadgroup.enumerate(list);
  for(Thread thread:list) {
   System.out.println(thread.getId()+"/t"+thread.getName()
                              +"/t"+thread.getThreadGroup()+"/t"
                              +thread.getState()+"/t"+thread.isAlive());}
}
2.7.3.测试方法如:
类名.disAllThread(getHeadThreadGroup());即可完成,第一个方法带有不断向上查
询的过程,这个过程可能在一般情况下也不会太慢,不过我们最好将其记录在一个地方,
方便我们提供管理类来进行直接管理,而不需要每次去获取,对外调用都是封装的运行
过程而已。
好,回到话题,继续说明 JVM 垃圾回收机制的信息,下面开始说明 JAVA 申请内存、回收
内存的机制了。

3、JAVA 如何申请内存,和 C、C++有何区别。
在上一次缩写的关于 JAVA 集合类文章中其实已经有部分说明,可以大致看到 JAVA 内部
是按照句柄指向实体的过程,不过这是从 JAVA 程序设计的角度去理解,如果我们需要更
加细致的问一个问题是:JVM 垃圾回收机制是如何知道哪些内存是垃圾内存的?JVM 为
什么不在平时就去回收内存,而是要等到内存不够用的时候才会去回收内存?不得不让
我进一步去探讨 JAVA 是如何细节的申请内存的。