我想在这里提高代码的性能:
jclass segWordClazz = env->FindClass("xxx/yyy/SegWord");
jmethodID initMethodId = env->GetMethodID(segWordClazz, "<init>", "(Ljava/lang/String;II)V");
jsize size = (jsize) words.size();
jobjectArray arr = env->NewObjectArray(size, segWordClazz, NULL);
jint i = 0;
for (i = 0; i < size; i++) {
jstring word = env->NewStringUTF(words[i].word.c_str());
jobject obj = env->NewObject(segWordClazz, initMethodId, word,
(jint) words[i].unicode_offset,
(jint) words[i].unicode_offset + words[i].unicode_length);
env->SetObjectArrayElement(arr, i, obj);
env->DeleteLocalRef(obj);
env->DeleteLocalRef(word);
}
我要做的是将文本拆分为单词,但如果文本太长,可能会生成太多单词导致大量NewObject
分配(1或200万可能更多)
我想知道是否有可能改善这里的表现?这段代码需要花费太多时间来执行。
答案 0 :(得分:0)
您的代码按顺序迭代并处理一些输入。
我看不出你如何减少对象的占用空间(因为我不知道你的要求 - 你不能解释为什么你这样做的事情)。
但是关于整体运行时间:考虑&#34;切片&#34;您的输入数据分成几个分区 - 这将使您能够并行运行。这甚至会增加内存消耗,但应该允许更快的处理。