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;
jbook
、jacc
、bookClass
、bookFields.accountL
使用我的应用程序中的对象/类/字段进行初始化。而且它们不是nil
/null(使用nil SetObjectField是快速的)。我用手工计算平均值
共 (0) 个答案