Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么SetObjectField这么慢?

因此,我在平板电脑上对JNI功能进行基准测试(平均超过3x5000次通话),每次通话需要:

SetObjectField        0.35 milliseconds
NewStringUTF          0.03 milliseconds
GetObjectField        0.003 milliseconds
SetBooleanField       0.002 milliseconds 
SetObjectArrayElement 0.002 milliseconds 

因此,SetBooleanField、SetObjectArrayElement和GetObjectField是合理快速的;NewStringUTF必须很慢,因为它正在分配新的内存;但是SetObjectField能做些什么,花这么长时间?它不仅仅是在一个已知的位置写一个指针吗?是到处都慢,还是只在我的旧安卓4.4平板电脑上慢?CheckJNI已启用(“延迟启用CheckJNI”),这会改变情况吗

Pascal中的基准代码:

for i := 1 to 3 do begin
  starttime := now;
  for k := 1 to 5000 do  
    env^^.SetObjectField(env, jbook, bookFields.accountL, jacc);
  log('TESTING TIME: ' + inttostr(round( (now - starttime)*MSecsPerDay)));
end;

或者

javaarray := env^^.NewObjectArray(env, 5001, bookClass, nil); 
for i := 1 to 3 do begin
  starttime := now;
  for k := 1 to 5000 do  
    env^^.SetObjectArrayElement(env, javaarray, k, jbook);
  log('TESTING TIME: ' + inttostr(round( (now - starttime)*MSecsPerDay)));
end;

jbookjaccbookClassbookFields.accountL使用我的应用程序中的对象/类/字段进行初始化。而且它们不是nil/null(使用nil SetObjectField是快速的)。我用手工计算平均值


共 (0) 个答案