IBM java 面试题目

soseasky 2010-09-13 05:02:44
如何知道类 com.ibm.ClassA 正在运行?
...全文
463 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
coooliang 2010-09-14
  • 打赏
  • 举报
回复
我只知道这题
和IBM一点关系都没有
zhenge1020 2010-09-14
  • 打赏
  • 举报
回复
28楼的有道理
kokobox 2010-09-14
  • 打赏
  • 举报
回复
你怎么知道什么时候拿到cpu的时间片?
kokobox 2010-09-14
  • 打赏
  • 举报
回复
正在运行? 怎么知道? 是否被加载可以知道,但是不代表正在运行。

harveywoo 2010-09-14
  • 打赏
  • 举报
回复
学习下,谢谢
soseasky 2010-09-14
  • 打赏
  • 举报
回复
看来这个问题不是只难倒了我一个 额~~~~~~~~~~~~~~~~
bekeer 2010-09-14
  • 打赏
  • 举报
回复
给那个类里面加一个静态块 然后再静态块里面加一个死循环
static{
while(true){
int i = 0;
System.out.println(i);
i++;
}
}
如果一直输入 就证明在运行
哈哈 ibm肯定得毙了我
魔芋红茶 2010-09-14
  • 打赏
  • 举报
回复
25楼说的有道理,应该从两个方面来看,1 类是否还未被加载过 2 类加载过的所有实例是否都已经被回收。
这个题。。。我发现比较像软件测试的题。。。
魔芋红茶 2010-09-14
  • 打赏
  • 举报
回复
查看文档后发现classLoad类下的findClass和findLoadedClass更适合解决楼主问题。两者均返回一个class列表

具体用哪个我也很疑惑。
从文档来看,
findClass会按双亲加载的方式来查找加载器中有无二进制名对应class?!其中有提到双亲加载模型中loadClass会调用findClass,我猜测是为了检测当前有无加载该实例,如果没,就开始加载,如果这样的话,findClass应该是返回已加载的类吧。
findLoadedClass会以有无指定启动加载器的标准来衡量一个实例是否被加载并返回,我不清楚这样是不是存在漏洞,比如指定启动加载器,但并未加载。我不知道指定加载器是不是等同于已经被加载。

最后要说的是看过英文文档后仍有疑惑,不知道两者真正要表达的意思,等高手或测试帝吧。
bayougeng 2010-09-14
  • 打赏
  • 举报
回复
25楼说的有理,加载并不代表运行。
魔芋红茶 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 salever 的回复:]

引用 6 楼 zhuzeitou 的回复:

Java code
public static boolean isClassRunning(String className) {
try {
Class cls = Class.forName(className);
ClassLoader classLoader = ClassLoader.getSystemClassLoader(……
[/Quote]

getSystemClassLoader

public static ClassLoader getSystemClassLoader()

返回委托的系统类加载器。该加载器是新的 ClassLoader 实例的默认委托父类加载器,通常是用来启动应用程序的类加载器。

在运行时启动序列的早期首先调用此方法,这时会创建系统类加载器并将其设置为调用 Thread 的上下文类加载器。

默认的系统类加载器是此类的一个与实现有关的实例。
第三句看不懂,从第一第二句来看,的确有可能是其他加载器加载目标类。
谈祥庆 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhuzeitou 的回复:]

Java code
public static boolean isClassRunning(String className) {
try {
Class cls = Class.forName(className);
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
……
[/Quote]
这只能知道这个类是否被JVM的系统类加载器加载了,并无法知道该类的实例化对象是否存在,所以这个问题本身是有问题,问这个问题的人本身对JVM的类加载机制不是很理解。
类是无法运行的,只有类的实例化对象才能在JVM中存活。所以所谓这个类是否存在运行,正确的说法是这个类的实例化对象是否GC回收掉,如果回收掉那就不算在运行,如果没有被回收掉,那就证明在运行中。
但是GC对我们CODER来说是透明的,也就无法知道一个类的对象是否正在运行,除非使用jprofile之类的JVM监控工具。
shehun 2010-09-14
  • 打赏
  • 举报
回复
关注一下
bigpretty 2010-09-14
  • 打赏
  • 举报
回复
从虚拟机里面查询啊.应该可以的,
kaysondong 2010-09-14
  • 打赏
  • 举报
回复
六楼的,有道理奥
魔芋红茶 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 bekeer 的回复:]

给那个类里面加一个静态块 然后再静态块里面加一个死循环
static{
while(true){
int i = 0;
System.out.println(i);
i++;
}
}
如果一直输入 就证明在运行
哈哈 ibm肯定得毙了我
[/Quote]
你这个。。。如果让你测车速你是不是要把车拆了装个计速器?
凉岑玉 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhuzeitou 的回复:]
Java code
public static boolean isClassRunning(String className) {
try {
Class cls = Class.forName(className);
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
……
[/Quote]
对!!!学习了!!!
xinmutou 2010-09-13
  • 打赏
  • 举报
回复
看不懂,呵呵等高手
sdxazly 2010-09-13
  • 打赏
  • 举报
回复
问题问的也太纠结了
hbin_apple 2010-09-13
  • 打赏
  • 举报
回复
真不会
加载更多回复(15)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧