Mögliche Duplizieren:
What makes JNI calls slow?Overhead eines Java JNI nennen
Zuerst mir sagen lassen, dass diese Fragen geboren ist, mehr aus Neugier als echte Notwendigkeit.
Ich bin neugierig zu wissen, was ist der Overhead bei einem JNI-Aufruf von Java, mit sagen, System.arraycopy
gegenüber Zuteilung des Arrays und Kopieren der Elemente über mit einer for-Schleife.
Wenn der Aufwand erheblich ist, dann ist es wahrscheinlich eine grobe „magische Zahl“ von Elementen, bis zu der sie kompensiert einfach eine for-Schleife zu verwenden, anstatt den Systemaufruf zu verwenden. Und was genau bewirkt der Systemaufruf, der diesen Overhead verursacht? Ich vermute, der Stack muss in den Kontext des Aufrufs geschoben werden, und das könnte eine Weile dauern, aber ich kann keine gute Erklärung für den gesamten Prozess finden.
Lassen Sie mich meine Frage klären:
Ich weiß, dass arraycopy mit der schnellste Weg ist ein Array in Java zu kopieren.
aber sagen, dass wir sagen, dass ich es bin mit einem Array aus nur einem Element zu kopieren. Da ich das zugrunde liegende Betriebssystem dazu aufrufe, hat , um ein Overhead in diesem Anruf zu sein. Ich bin interessiert zu wissen, was dieser Overhead ist und was im Prozess des Anrufs passiert.
Es tut mir leid, wenn mit arraycopy Sie aus dem Sinn und Zweck meiner Frage verleitet. Ich bin interessiert, den Overhead eines JNI-Anrufs zu kennen, und was am eigentlichen Anruf beteiligt ist.
Wohlgemerkt, 'System'-Aufruf ist ein etwas verwirrender Begriff, da er fälschlicherweise für einen [Systemaufruf] (https://en.wikipedia.org/wiki/System_call) gehalten werden könnte. –
Übrigens gibt es eine Fülle von Informationen in http://stackoverflow.com/questions/2772152/why-is-system-arraycopy-native-in-java – NPE
Gelöschte meine Antwort, ich denke, das wird Ihnen helfen: http: //stackoverflow.com/questions/7699020/what-makes-jni-calls-slow –