タグ付けされた質問 「memory-leaks」

メモリリークは、プログラムが割り当てたメモリを解放できなかったが、使用しておらず、回復できない場合に発生します。

4
objc_exception_throwにブレークポイントを追加するにはどうすればよいですか?
これはこのSOのブラッドラーソンからの答えでした 質問に対する 2つのブレークポイントを追加すると、これらの例外をデバッグできるはずです。これを行うには、実行|に移動します。表示| ブレークポイントと2つのグローバルブレークポイントを作成します(すべてのアプリケーションで非常に役立つため、グローバルに作成します)。最初の名前は「objc_exception_throw」で、場所は「libobjc.A.dylib」である必要があります。2番目は「-[NSExceptionraise]」で、その場所は「CoreFoundation」である必要があります。 ここで、ブレークポイントを有効にしてアプリケーションのデバッグを開始すると、これらの例外のスローで中断するはずです。これで、デバッガー内で例外の原因となった一連のイベントを確認できるはずです。 今この答えで私はどのように私が言及された場所を追加するのか尋ねたいですか?

1
Navigation Arch Componentは誤検知のメモリリークを引き起こす可能性がありますか?
メモリリークとその原因についての基本的な知識があります。そのため、コードに問題があるのか​​、それとも誤検知なのかわかりません。プロジェクトは小さくないので、コードのどの部分を共有するべきかわかりません。ただし、コメント欄でお知らせください。必要なコードを追加します。 ナビゲーションアーチコンポーネントを使用し、MVVMパターンに従います。プロジェクトの開発の後半でLeakCanaryライブラリを追加したところ、画面間を移動すると、保持されたインスタンスに関する警告がすぐに表示され始めました。 この問題は、バックスタックにフラグメントを追加すると発生します。バックスタックにフラグメントを追加するたびに、保持されるインスタンスのカウンターが増加します。LeakCanaryがしきい値の5に達すると、ヒープがダンプされ、レポートが提供されます。 しかし、[戻る]ボタンをクリックして前の画面に戻ると、保持されているインスタンスのカウンターが減少し、最終的に1番目の画面に戻ると、保持されているすべてのインスタンスが消えます。 ヒープ分析レポートを見るとCoordinatorLayout、XML内の参照である変数coordinatorLayout がリークしていることがわかります。変数とそのすべての使用法を削除してアプリを再度実行すると、同じ問題が発生しますが、別の変数がxml内の別のビューへの参照になっています。LeakCanaryがリークしていると報告したすべてのビューとその使用法を削除しようとしました。TextViewテキストを設定するためだけに使用され、onViewCreated他の場所では使用されていないがリークしていると言われたとき、コードに問題があることに疑問を感じ始めました。 ライフサイクルメソッドの呼び出しをフラグメントで分析しましたが、前のフラグメントの新しい画面に移動するonDestroyViewと、呼び出されるまでのすべてのメソッドが呼び出されますが、呼び出されませんでしたonDestroy。[戻る]をクリックするとonDestroy、バックスタックの上にあるフラグメントが呼び出され、保持されているインスタンスのカウンターが減少します。 ナビゲーションコンポーネントがフラグメントがバックスタックにあるときにフラグメントのインスタンスを保持しており、LeakCanaryがそれをリークとして認識していると思います。

1
1 MB以上のJavaバイト配列がRAMの2倍を占める
Windowsの10の下のコードを実行している/ OpenJDKの11.0.4_x64は出力として生成used: 197とexpected usage: 200。これは、100万要素の200バイト配列が約100を占めることを意味します。200MB RAM。すべて元気です。 コード内のバイト配列割り当てをnew byte[1000000]からnew byte[1048576](つまり、1024 * 1024要素に)変更すると、出力used: 417ととして生成されますexpected usage: 200。一体何ですか? import java.io.IOException; import java.util.ArrayList; public class Mem { private static Runtime rt = Runtime.getRuntime(); private static long free() { return rt.maxMemory() - rt.totalMemory() + rt.freeMemory(); } public static void main(String[] args) throws InterruptedException, IOException { int …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.