2017-06-15 8 views
0

私のアプリでアンドロイドのネイティブヒープのリークに問題が発生しました。リークはLinkedBlockingQueueから来ているように見えます。LinkedBlockingQueueはクリーンアップされずにそのまま成長しています。Leaking LinkedBlockingQueue

以下のように見てみると、ネイティブヒープは合計478Mを持ち、成長を続けます(20Mから始まり、数秒ごとに約250kずつ増加し続けます)。 JVMヒープは正しく動作しており、約100Mと同じレベルにとどまります。私のアプリは独自のネットワークコードを使用していますが、それをオフにしてもアプリケーションはちょうどそこに「座って」いても、まだこのリークがあります。

私は、LinkedBlockingQueuesがcom.android.okhttp.ConnectionPoolインスタンス(同じもの)を指していることを確認しました。私はコード内でどこでもokhttpを使用しません。私は設定、データベース、およびストレージのサポートでfirebaseを使用します。しかし、リスナーを接続しているconfigを除いて、私がテストしている間は他のサービスはありません。

Console Log

スナップショットは、以下の私のJavaヒープ・ダンプを示しています。 LinkedBlockingQueueには6029のインスタンスと約300Mの保持されたメモリがあります。この数はネイティブのヒープの増加とともに増加するので、関係があると仮定しています。

hpref classes

スナップショットは以下の項目は、接続プールでLinkedBlockingQueue $ノード・インスタンスの一つを示します。それらはすべて同じように見え、同じアイテムを指しています。

hpref instance

は、私はそのようなメモリリークが発生したことはありませんし、その理由が何であるかわかりません。私はあなたの誰かがそれが何であるかについての考えを持っている場合、またはあなたが以前にそのような問題を抱えていた場合、感謝します。

答えて

0

私はそれを理解しました。これは私のアプリやfirebaseとは関係ありませんでした。 ADB Integrationを搭載したAndroid Studioが原因だったようです。 統合を無効にし、Androidデバイスモニタを使用してメモリを取得し、ログを取得すると、ネイティブのヒープは成長せず、ほぼ同じレベルにとどまります。

関連する問題