рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореВрд▓ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рдХреНрдпреЛрдВ рд▓реЗрддреЗ рд╣реИрдВ? рдХрднреА-рдХрднреА, рддреГрддреАрдп-рдкрдХреНрд╖ DLL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЕрдиреБрдХреВрд▓рд┐рдд C рдпрд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореАрдбрд┐рдпрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдкреАрдбрд╝рди, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЖрджрд┐ рдХреЗ рд▓рд┐рдПред
рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдореБрдлреНрдд рдирд╣реАрдВ рд╣реИред рдХрдИ рдмрд╛рд░, JNI рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдмрдирд╛рдирд╛;
- рдПрдмреАрдЖрдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рддрд░реНрдХ;
-
jobject
рд╣реИрдВрдбрд▓ (jobject
) рдореЗрдВ рд░реИрдкрд┐рдВрдЧ рд▓рд┐рдВрдХ; -
JNIEnv*
рдФрд░jclass
рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдкрд╛рд░рд┐рддjclass
; - рдореЙрдирд┐рдЯрд░ рдХреА рдХрдмреНрдЬрд╛ рдФрд░ рд░рд┐рд╣рд╛рдИ рдЕрдЧрд░
synchronized
рд╡рд┐рдзрд┐; - рджреЗрд╢реА рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ "рдЖрд▓рд╕реА";
- рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдФрд░ рдирд┐рдХрд╛рд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛;
-
in_Java
рд░рд╛рдЬреНрдп рд╕реЗin_native
рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдПрдХ рдзрд╛рд░рд╛ рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг; - рд╕рдлрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ;
- рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред
рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рджреЗрд╢реА рддрд░реАрдХреЗ рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ: рд╡реЗ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдвреЗрд░ рдореЗрдВ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдЯреИрдХ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВред рдХреНрдпрд╛ рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рди рдХрд░реЗрдВ?
рд╣рд╛рдВ, рдФрд░ рдЖрдЬ рдореИрдВ рд╕рд░рд▓ JNI рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рддреЗрдЬреА рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЙрдЯрд╕реНрдкреЙрдЯ JVM рдХреА рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдЬрд╛рд╡рд╛ 7 рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ, рдЬреЛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ, рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИред
рдЬреЗрдПрдирдЖрдИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореВрд▓ рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ
byte[]
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
byte[]
рд╕рд░рдгреА рдФрд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдпреЛрдЧ рджреЗрддрд╛ рд╣реИред JNI рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:
-
GetByteArrayRegion
- рдЬрд╛рд╡рд╛ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЛ рдореВрд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ;
GetByteArrayRegion рдЙрджрд╛рд╣рд░рдгJNIEXPORT jint JNICALL Java_bench_Natives_arrayRegionImpl(JNIEnv* env, jclass cls, jbyteArray array) { static jbyte buf[1048576]; jint length = (*env)->GetArrayLength(env, array); (*env)->GetByteArrayRegion(env, array, 0, length, buf); return sum(buf, length); }
-
GetByteArrayElements
рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ JVM рд╣реА рдЙрди рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдХреЛ рд░рд┐рд▓реАрдЬрд╝рдмрд╛рдЗрдЯрдПрдпрд░рдПрдпрд░рд▓рд╛рдЗрдВрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
GetByteArrayElements рдЙрджрд╛рд╣рд░рдгJNIEXPORT jint JNICALL Java_bench_Natives_arrayElementsImpl(JNIEnv* env, jclass cls, jbyteArray array) { jboolean isCopy; jint length = (*env)->GetArrayLength(env, array); jbyte* buf = (*env)->GetByteArrayElements(env, array, &isCopy); jint result = sum(buf, length); (*env)->ReleaseByteArrayElements(env, array, buf, JNI_ABORT); return result; }
- рдХреНрдпреЛрдВ, рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ, рд╕рд░рдгреА рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рдЖрдк рдореВрд▓ рд╕реЗ рд╕реАрдзреЗ рдЬрд╛рд╡рд╛ рд╣реАрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЬреЗрдПрдирдЖрдИ рд╡рд┐рдзрд┐ рдЪрд▓ рд░рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ
GetPrimitiveArrayCritical
рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рд╣реАрдк рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рд╕реАрдзрд╛ рдкрддрд╛ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рдиReleasePrimitiveArrayCritical
рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ GC рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗReleasePrimitiveArrayCritical
ред
GetPrimitiveArrayCritical рдЙрджрд╛рд╣рд░рдгJNIEXPORT jint JNICALL Java_bench_Natives_arrayElementsCriticalImpl(JNIEnv* env, jclass cls, jbyteArray array) { jboolean isCopy; jint length = (*env)->GetArrayLength(env, array); jbyte* buf = (jbyte*) (*env)->GetPrimitiveArrayCritical(env, array, &isCopy); jint result = sum(buf, length); (*env)->ReleasePrimitiveArrayCritical(env, array, buf, JNI_ABORT); return result; }
рдЧрдВрднреАрд░ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА
рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рдЧреБрдкреНрдд рдЙрдкрдХрд░рдг рд╣реИред рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд JNI рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреЗрд╡рд▓
JavaCritical_
рдмрдЬрд╛рдп
JavaCritical_
рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рдеред рддрд░реНрдХреЛрдВ рдХреЗ рдмреАрдЪ,
JNIEnv*
рдФрд░
jclass
, рдФрд░
jbyteArray
рдмрдЬрд╛рдп, рджреЛ рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:
jint length
- рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдФрд░
jbyte* data
- рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдЪреНрдЪрд╛ рд╕реВрдЪрдХред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдиреЗрдЯрд┐рд╡ рд╡рд┐рдзрд┐ рдХреЛ рдорд╣рдВрдЧреЗ
GetArrayLength
рдлрд╝рдВрдХреНрд╢рди
GetArrayLength
рдФрд░
GetByteArrayElements
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдЖрдк рддреБрд░рдВрдд рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЬреАрд╕реА рдореЗрдВ рджреЗрд░реА рд╣реЛрдЧреАред
JNIEXPORT jint JNICALL JavaCritical_bench_Natives_javaCriticalImpl(jint length, jbyte* buf) { return sum(buf, length); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдиреЗрдЯрд┐рд╡ рдмрдирдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╕рдЦреНрдд рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рд╡рд┐рдзрд┐
static
рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░synchronized
рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП; - рддрд░реНрдХреЛрдВ рдХреЗ рдмреАрдЪ, рдХреЗрд╡рд▓ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдиреЗрдЯрд┐рд╡ рдЬреЗрдПрдирдЖрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ рдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВ;
- рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╡рд┐рдзрд┐ рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рдкреВрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреАрд╕реА рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд░реЛрдХрддреА рд╣реИред
JDK рдХреЗ рдореВрд▓ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдХреЙрд▓ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдиреЗрдЯрд┐рд╡реНрд╕ рдХреЛ рдПрдХ рдирд┐рдЬреА рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереАред рд╡рд┐рд╡рд░рдг рд╕реЗ рдЬреЛ рдЕрдзрд┐рдХрддрдо рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдмрдЧрдЯреНрд░реИрдХрд░ рдореЗрдВ рдХрд╛рд░реНрдп рдкрд░ рдЯрд┐рдкреНрдкрдгреА рд╣реИ ред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛:
JavaCritical_
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рд╣реЙрдЯ (рд╕рдВрдХрд▓рд┐рдд) рдХреЛрдб рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП,
JavaCritical_
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ "рдлреЙрд▓рдмреИрдХ" рдкрд╛рд░рдВрдкрд░рд┐рдХ
JavaCritical_
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп JVM рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИред
рдЧреНрд░рд╛рдо рдореЗрдВ рдХрд┐рддрдиреЗ рд╣реЛрдВрдЧреЗ?
рдЖрдЗрдП рдорд╛рдкреЗрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдмрдЪрдд рдХреНрдпрд╛ рд╣реИ: 16, 256, 4KB, 64KB рдФрд░ 1MBред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЬреЗрдПрдордПрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ
@State(Scope.Benchmark) public class Natives { @Param({"16", "256", "4096", "65536", "1048576"}) int length; byte[] array; @Setup public void setup() { array = new byte[length]; } @GenerateMicroBenchmark public int arrayRegion() { return arrayRegionImpl(array); } @GenerateMicroBenchmark public int arrayElements() { return arrayElementsImpl(array); } @GenerateMicroBenchmark public int arrayElementsCritical() { return arrayElementsCriticalImpl(array); } @GenerateMicroBenchmark public int javaCritical() { return javaCriticalImpl(array); } static native int arrayRegionImpl(byte[] array); static native int arrayElementsImpl(byte[] array); static native int arrayElementsCriticalImpl(byte[] array); static native int javaCriticalImpl(byte[] array); static { System.loadLibrary("natives"); } }
рдкрд░рд┐рдгрд╛рдо
Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) Benchmark (length) Mode Samples Mean Mean error Units b.Natives.arrayElements 16 thrpt 5 7001,853 66,532 ops/ms b.Natives.arrayElements 256 thrpt 5 4151,384 89,509 ops/ms b.Natives.arrayElements 4096 thrpt 5 571,006 5,534 ops/ms b.Natives.arrayElements 65536 thrpt 5 37,745 2,814 ops/ms b.Natives.arrayElements 1048576 thrpt 5 1,462 0,017 ops/ms b.Natives.arrayElementsCritical 16 thrpt 5 14467,389 70,073 ops/ms b.Natives.arrayElementsCritical 256 thrpt 5 6088,534 218,885 ops/ms b.Natives.arrayElementsCritical 4096 thrpt 5 677,528 12,340 ops/ms b.Natives.arrayElementsCritical 65536 thrpt 5 44,484 0,914 ops/ms b.Natives.arrayElementsCritical 1048576 thrpt 5 2,788 0,020 ops/ms b.Natives.arrayRegion 16 thrpt 5 19057,185 268,072 ops/ms b.Natives.arrayRegion 256 thrpt 5 6722,180 46,057 ops/ms b.Natives.arrayRegion 4096 thrpt 5 612,198 5,555 ops/ms b.Natives.arrayRegion 65536 thrpt 5 37,488 0,981 ops/ms b.Natives.arrayRegion 1048576 thrpt 5 2,054 0,071 ops/ms b.Natives.javaCritical 16 thrpt 5 60779,676 234,483 ops/ms b.Natives.javaCritical 256 thrpt 5 9531,828 67,106 ops/ms b.Natives.javaCritical 4096 thrpt 5 707,566 13,330 ops/ms b.Natives.javaCritical 65536 thrpt 5 44,653 0,927 ops/ms b.Natives.javaCritical 1048576 thrpt 5 2,793 0,047 ops/ms
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЫреЛрдЯреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрдирдЖрдИ рдХреЙрд▓ рдХреА рд▓рд╛рдЧрдд рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рд╕рдордп рд╕реЗ рдХрдИ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИ! рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдУрд╡рд░рд╣реЗрдб рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рддреБрд▓рдиреАрдп рд╣реИред рдЦреИрд░, рдФрд░ рдмрд╣реБ-рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ - рд╕рднреА рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдиреЗрдЯрд┐рд╡реНрд╕ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдЬреЗрдПрдирдЖрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ JDK 7 рдХреЗ рд╕рд╛рде рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреЗрдПрдирдЖрдИ рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ, рдЖрдк рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдореВрд▓ рдХреЛрдб рдореЗрдВ рдЬрд╛рд╡рд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╕реА рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдиреЗрдЯрд┐рд╡ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЬреАрд╕реА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рдкрд╛рдПрдЧрд╛ред