私は自分の3Dエンジンを書いています。 OBJファイルからロードしたオブジェクトを配列リストの中に残します。問題は、リストからオブジェクトを削除したときにガベージコレクションが取得されない場合です。それはまだコードのどこかで参照されているかもしれませんが、検索する首の痛みです。そこでオブジェクトをロックする方法があるのだろうかと疑問に思っていました。オブジェクトを削除しようとすると、何かがアクセスしようとするたびにエラーがスローされます。
高いポリメッシュは、メモリ内で数百メガバイトを要する可能性があります。
ありがとうございました。 (私はかなり巨大なので、コードを投稿したくない)ガベージコレクションのためにオブジェクトを意図的に放棄する方法。 (Java)
答えて
コンテナがある場合は、オブジェクトを追加してオブジェクトを削除して、そのオブジェクトへの参照がなくなりました。
リファレンスを本当に心配している場合、またはコピーを作成した場合は暗黙的に= null
です。
「エラーが発生しました」は、まだ参照が残っている場合はnullポインターになります。 (ただし、実際には削除する必要がある場合は除外してください)
オブジェクトがまだ参照されているときにオブジェクトをメモリから削除することはできません。
オブジェクトがそのように構成されている場合は、内部状態を削除または最小化することが最も可能です。たとえば、コレクションのclear()
に電話をかけると、コレクションからすべての要素が削除されるため、コレクションのサイズが大幅に小さくなります。あなたの場合は、そのようなことをする無効化メソッドを追加することができると思います(おそらく奇妙なデザインですが、オブジェクトがまだ使用されている場所と理由はわかります)。
これは、追加レベルの逆参照で解決できます。むしろコレクションであなたのBigObject
を格納するのではなく、オブジェクトの「封筒」を格納し、実際のオブジェクトへの参照のみをドロップするrelease()
操作を追加します。
interface MyInterface {
void usefulOperation();
}
class VeryBigObject implements MyInterface {
public void usefulOperation() {
...
}
}
class BigObjectEnvelope implements MyInterface {
private MyInterface inner = new VeryBigObject();
public void usefulOperation() {
inner.usefulOperation();
}
public void release() {
inner = null;
}
}
がBigObjectEnvelope
オブジェクトのコレクションを作成し、それらを使用しますMyInterface
インターフェイスを使用します。オブジェクトを終了したら、release()
を呼び出します。他の場所でBigObjectEnvelope
の参照がある場合でも、usefulOperation()
を呼び出すと例外がスローされます。
非常に興味深い考えです。これは、墓石技術を手動で実装するようなものです。やってみます –
- 1. SetActionは()の意図のために行う(放送を)何
- 2. オートラジオン放送意図?
- 3. 放棄カートにギフトを追加する方法Shopifyのメール
- 4. IServiceProviderガベージコレクション/廃棄
- 5. iPhoneのためにビューをプログラム的に起動/破棄する方法は?
- 6. テストのためにバックグラウンドでアプリケーションを強制的に破棄する方法
- 7. 意図的にオーバーフィットニューラルネットワーク
- 8. クラスオブジェクトを意図的にアンドロイドで放送受信機に渡します
- 9. ARMv7で意図的にプリフェッチを中止する方法
- 10. Luaで放棄されたメモリリークを追跡する方法は?
- 11. Magentoが放棄したカートレポートコレクションをフィルタリングする方法
- 12. Git - origin/master diverged - 放棄されたコミットを放棄
- 13. WebGLコンテキストを解放してガベージコレクションする方法は?
- 14. Javaでガベージコレクションされたオブジェクトを確認する方法はありますか?
- 15. Androidの意図: - 使用意図がからクラスオブジェクトを渡すために活動
- 16. Javaの短命オブジェクト&ガベージコレクション
- 17. モデルエンティティに加えられた変更を放棄/ロールバックする方法は?
- 18. 意図的にハイフンを無視する
- 19. 地図を更新するための機能的方法
- 20. fabric.ioのビルドを意図的に期限切れにする方法
- 21. プログラムをターミナルの制御を放棄する方法は?
- 22. 最新のFirefox WebExtensionでXraysのビジョンを放棄する方法?
- 23. RxSwift PublishSubjectが意図せずに廃棄される
- 24. 410エラーがSEO目的のため意図的に送信されたときにページ自体をロードする
- 25. 意図的に無意味なMIMEタイプ
- 26. クロムは、私は以下のように意図にヘッダを追加するために使用意図
- 27. ハングするスレッドを最終的にPythonでガベージコレクションする方法
- 28. WebApp(Tomcat-jdbc)プールされたDB接続の放棄例外を放棄
- 29. Javaの.javaファイルの動的ロード、ガベージコレクション
- 30. Java:意図的にBadPaddingExceptionをキャッチしない
オブジェクトは実際にはコンテナにはありません。作成されると、ArrayListの内部に保存されます。私はオブジェクトに参照を持っているメッシュへの参照を持っていることに気付きました。参照ループのために収集されない可能性があります。 –
@JackLe一般的に使用されている読書可能なモダンなJVMには、参照ループを処理できるガベージコレクタがあります。 – hexafraction
@JackLeガベージコレクションは、定義によってサイクルを処理します。 Javaは初めからそうしてきました。 – EJP