初級プログラマが知っているJVMが必要です。

1461 ワード

JVMについて話をすると、まずなぜ仮想マシンが必要なのかを考えます。
javaのクロスプラットフォームは仮想マシンによって実現されるからです。
JVMの原理
1です。クラスローディング機構
jvmクラスローディングメカニズム:ローディング、検証、準備、解析、初期化
クラスのロードメカニズムは両親から任されたもので、先に要求を親に委任してロードします。
Bootstrap Class loader>Extension Class Loader;Apple Class loader
どのように検証しますか?自分でクラスを作って、例えばUserを作ります。
User.class.getClassLoader().toString()             appClassloader
User.calss.getClassLoader().getParent.toString()      ExtClassLoader
      bootstrap ClassLoader           NullPointerException
利点:同じバイトコードのメモリの多さを防ぐため、クラスの一意性を保証します。
どのように両親の任命を打ち破って、クラスのLoaderを受け継いで、findClassを書き直して、loadClass方法
2です。メモリ管理
各JVMはいずれもメソッドエリア、javaスタック、javaスタック、ローカル方法スタック、コマンドカウンタを含んでいます。
メソッドエリアとjavaスタックはスレッド共有です。
javaスタック、ローカル方法スタック、コマンドカウンタはスレッドごとにあります。スレッド分離です。
どのように爆山を支えますか?死のサイクルは、OutOfMemoryErrorを投げます。
どうやってスタックを支えて再帰的に呼び出しますか?
3です。ごみの回収
GC(被災地)
gcのいくつかのアルゴリズムを知るには、クリアアルゴリズム、コピーアルゴリズム、整理アルゴリズムをマークします。
jdk 1.7とjdk 1.8のgcに関する恒久帯の違いは、1.8は永久帯をヒープに入れず、ディスクに入れました。
いつgcができますか?
対象が引用されていない場合は、自分でgc、System.gc()
GCの場合は、オブジェクトは強引用、ソフト引用、弱引用、虚引用に分類されます。
finalize()は対象を引用した場合、対象を今度gcする時は回収されません。
後は新生代、年代と永久帯について話します。
若い世代は新しい対象です。引用回数が少ないです。gcに従って、これらの対象に引用される回数があります。回数が一定に達したら、古い年代に置かれます。だから、両世代のアルゴリズムは違っています。若い世代はコピーアルゴリズムで、古い世代はタグの整理アルゴリズムを使っています。
新生代のデフォルトのコレクション:Paraler Scabienge
古い年代のデフォルトのコレクション:Paraler Old
また、どのようにjvmにパラメータを調整しますか?ideaはtomcatのVM optionsです。