JAVAのインライン関数
インライン関数を話す前に、関数の呼び出し手順について説明します.
ある関数を呼び出して実際にプログラム実行順序をその関数が格納しているメモリのアドレスに移行し、関数のプログラム内容を実行した後、
関数を実行する前の場所に移動します.このような転送操作は、転送前に現場を保護し、実行した住所を記憶し、転送後に現場を回復し、元の保証に従うことが要求される.
アドレスを保存して実行を続行します.つまり通常の圧屋と出桟ということです.したがって,関数呼び出しには一定の時間と空間的なオーバーヘッドが必要である.では、それらの関数体について
コードは大きくなく、頻繁に呼び出される関数では、この時間と空間の消費が大きくなります.
では、このパフォーマンス消費の問題をどのように解決するか、このときはインライン関数を導入する必要があります.インライン関数とは、プログラムのコンパイル時にコンパイラがプログラムに現れることです.
のインライン関数の呼び出し式は、インライン関数の関数体で直接置き換えられます.明らかに、このようにして回転する問題は発生しませんが、コンパイル中であるため
時に関数体のコードをプログラムに置き換えるため、ターゲットプログラムのコード量が増加し、空間オーバーヘッドが増加し、時間代理販売で関数呼び出しに似ていない場合
それほど大きく,ターゲットコードの増加を代価として時間の節約を取り替えることが分かる.
大学でCコードを書くことを勉強するとき、私たちはいくつかの短い論理をマクロに定義することを学びました.コンパイラがコンパイルされると
マクロの場所に直接マクロのコードで置き換えます.これにより、呼び出し方法のようなスタック、スタックを出て、パラメータを伝達する必要がなくなります.性能が向上した.インライン関数
処理方法はマクロと似ていますが、マクロとは異なり、インライン関数は関数自体の特性(タイプ、役割ドメインなど)を有します.
C++コードを書いたことがある人は知っているはずですが、C++にはインラインキーワードで修飾されたインライン関数があります.また、Class定義に書かれた関数も
コンパイラはインライン関数とみなされます.
ではjavaのインライン関数はどのような形をしているのでしょうか.Javaでfinalキーワードを使用して、関数がインライン関数であることを示します.たとえば、次のようにします.
この指示は必要ではない.finalキーワードはコンパイラに教えるだけで、コンパイル時に性能の向上を考慮してfinal関数をインライン関数と見なすことができます.
しかし、最後にコンパイラがどのように処理するか、コンパイラはfinal関数をインラインとして処理するか、インラインとして処理しないかの性能比較を分析します.
ある関数を呼び出して実際にプログラム実行順序をその関数が格納しているメモリのアドレスに移行し、関数のプログラム内容を実行した後、
関数を実行する前の場所に移動します.このような転送操作は、転送前に現場を保護し、実行した住所を記憶し、転送後に現場を回復し、元の保証に従うことが要求される.
アドレスを保存して実行を続行します.つまり通常の圧屋と出桟ということです.したがって,関数呼び出しには一定の時間と空間的なオーバーヘッドが必要である.では、それらの関数体について
コードは大きくなく、頻繁に呼び出される関数では、この時間と空間の消費が大きくなります.
では、このパフォーマンス消費の問題をどのように解決するか、このときはインライン関数を導入する必要があります.インライン関数とは、プログラムのコンパイル時にコンパイラがプログラムに現れることです.
のインライン関数の呼び出し式は、インライン関数の関数体で直接置き換えられます.明らかに、このようにして回転する問題は発生しませんが、コンパイル中であるため
時に関数体のコードをプログラムに置き換えるため、ターゲットプログラムのコード量が増加し、空間オーバーヘッドが増加し、時間代理販売で関数呼び出しに似ていない場合
それほど大きく,ターゲットコードの増加を代価として時間の節約を取り替えることが分かる.
大学でCコードを書くことを勉強するとき、私たちはいくつかの短い論理をマクロに定義することを学びました.コンパイラがコンパイルされると
マクロの場所に直接マクロのコードで置き換えます.これにより、呼び出し方法のようなスタック、スタックを出て、パラメータを伝達する必要がなくなります.性能が向上した.インライン関数
処理方法はマクロと似ていますが、マクロとは異なり、インライン関数は関数自体の特性(タイプ、役割ドメインなど)を有します.
C++コードを書いたことがある人は知っているはずですが、C++にはインラインキーワードで修飾されたインライン関数があります.また、Class定義に書かれた関数も
コンパイラはインライン関数とみなされます.
ではjavaのインライン関数はどのような形をしているのでしょうか.Javaでfinalキーワードを使用して、関数がインライン関数であることを示します.たとえば、次のようにします.
public final void method1() {
//TODO something
}
この指示は必要ではない.finalキーワードはコンパイラに教えるだけで、コンパイル時に性能の向上を考慮してfinal関数をインライン関数と見なすことができます.
しかし、最後にコンパイラがどのように処理するか、コンパイラはfinal関数をインラインとして処理するか、インラインとして処理しないかの性能比較を分析します.