私の最初の反応は次のとおりでした。あなたがやりたいことは、参照されていないチャンクをヒープに残して後で再び見つけるようなものだとは想像できません。あたかも、ヒープへの 4 バイトのポインターを維持するには多すぎて、このチャンクを追跡できないかのように。
したがって、問題は参照されていないメモリを割り当てたままにするのではなく、参照中のメモリを意図的に破棄することです。ガベージ コレクションはある時点でメモリを解放する機能を実行するため、この特定のメモリ チャンクを破棄するには、別の命令シーケンスを呼び出すだけでよいように思われます。
ただし、問題は次の場所にあります。
String s = "Here is a string.";
String t = s;
String u = s;
junk( s );
何をし、何t
をu
指していますか?厳密な参照システムでは、t
でu
ある必要がありますnull
。つまり、参照カウントだけでなく、おそらく追跡も行う必要があります。
ただし、コードのこの時点で終了する必要があることがわかります。s
そのjunk
ため、参照を null に設定し、一種の優先度コードを使用してスイーパーに渡すことができます。制限付きの実行のために gc をアクティブにすることができ、到達できない場合にのみメモリが解放されます。したがって、誰かが何らかの方法で再び使用するためにコード化したものを明示的に解放することはできません。しかし、s
が唯一の参照である場合、チャンクは割り当て解除されます。
したがって、明示的な側面に限定的に固執する場合にのみ機能すると思います。