我使用Java语言正在设计和实现一个JVM,但在运行阶段遇到了两个问题,希望能得到大家的指点。1. 怎么样调用Java API中的类的本地方法?例如Object类。我将Object.class文件中的内容装载之后,就要进行初始化。这个类的初始化方法<clinit>只有两条指令:
invokestatic 71
return
其中第一条指令实际上是调用一个Object类中的私有的本地方法registerNatives。我应该怎么样做才能调用这个方法呢?还是我必须自己去实现这个方法?2. 怎么样进行Java级的多线程管理?作为一个JVM,是怎么样知道Java源程序新建了一条线程?怎么样知道线程改变了它的状态?怎么样知道线程间发生了切换?怎么样知道线程已经死亡?
invokestatic 71
return
其中第一条指令实际上是调用一个Object类中的私有的本地方法registerNatives。我应该怎么样做才能调用这个方法呢?还是我必须自己去实现这个方法?2. 怎么样进行Java级的多线程管理?作为一个JVM,是怎么样知道Java源程序新建了一条线程?怎么样知道线程改变了它的状态?怎么样知道线程间发生了切换?怎么样知道线程已经死亡?
System.loadLibrary( "Jni_Name" ) ;
}
加载jni.然后再调用native方法 public native void method()
2、建议去看一看java线程第二版.
问题就是invokestatic 71指令调用的本地方法是registerNatives,该方法是私有的:public class Object { private static native void registerNatives
……
}怎么样调用这种私有本地方法呢???
public class Object { private static native void registerNatives(); public native int hashCode();
……
}有这样的语句会不会有问题:
Object obj = new Object();
obj.hashCode();
"JVVM.java": registerNatives() has private access in java.lang.Object at line 34, column 12
你在object类中写一个公共方法!然后再调用
public class Object { private static native void registerNatives(); public native int hashCode();
……
public void register() {
registerNatives();
}
}
-------------------------------------我是想使用Java语言实现一个JVM,但目前就是不知道怎么样调用私有的本地方法。