MAT: Как вы диагностируете "x экземпляров"byte[]", загруженных"<загрузчик системного класса>", занимающих у (z%) байт" проблем с памятью?
Я пытаюсь диагностировать проблему с памятью в моем приложении для Android. Я выгрузил файл HPROF и загрузил его в инструмент Eclipse MAT (см. Как анализировать память с помощью android studio). Я сейчас пытаюсь разобраться в перечисленных "Утечка подозреваемых"
Мне интересно, если следующее указывает на реальную проблему:
23 instances of "byte[]", loaded by "<system class loader>" occupy 5,504,576 (12.74%) bytes.
Biggest instances:
byte[1077600] @ 0x43c523e0 rM!.rM!.tO#.wR&.zU).}X,..[/..]1..[/..[/..\0..\0..[/..Z...[/..\0..]7..]7..^8..^8..]7..\6.}Z4.}Z4.|Z4.|Z4.{Y3.zX2.zX2.zX2.zX2.{Y3.xX2.wW1.vV0.uU/.tS0.sR/.qS/.qS/.qS/.oQ-.oQ/.pR0.pS1.pS1.oR0.mP..sN1.sN1.sN1.rM0.sO/.sO/.uN/.uN/.xO/.xO/.xP-.wO,.yN+.yN+.{P-.|Q..... - 1,077,616 (2.49%) bytes.
byte[960000] @ 0x4383ef88 ................................................................................................................l.y.n.{.}...........................................l}s............................................................................................ - 960,016 (2.22%) bytes.
byte[563200] @ 0x42bd8c40 7@/. )..!*..)0 .'...!(..#'..04%.15'./6&.3;&.DL5.NX@.AJ5.0;*.1<,.AN<.6C1.0;*.-6%.*1!./3$.24&./0".+3../7 .6:).=A3.YZT.hhf._]`.caf.STV.[]\.GLH.@E?.KQG.JRE.BJ;.9B1.04..9C .=J..7H..>L2.RZO.[`\.[[Y.ceb.fhe.ikh.gif.bda._a^.ac`.egd.ad].^aZ.[^W.[^W.\_X.\_X.Z]V.WZS.... - 563,216 (1.30%) bytes.
byte[563200] @ 0x42c69660 46+.)+ .%'..%&.."#..#$..&'!.%& .%'..')..)+ .+-".,.#.+-".)+ .(*..,.#.+-".*,!.*,!.)+ .)+ .*,!.*,!.)+ .(*..(*..)+ .,.#..0%./1&./1&.,-%.*+#.()!.'( .'( .'( .&'..$%..&&..&&..&&..&&..&&..&&..&&..&&..'&!.'&!.'&!.'&!.'&!.'&!.'&!.'&!.** .++!...$.11%.33'.34&.23%.23%.... - 563,216 (1.30%) bytes.
byte[563200] @ 0x42cf7310 ---................................................................................................................................................................................................................................................................ - 563,216 (1.30%) bytes.
byte[563200] @ 0x42d85fe8 ................................................................................................................................................................................................................................................................... - 563,216 (1.30%) bytes.
byte[563200] @ 0x42e13f10 ..................................................................................................................................................................}...}...}...}...|...|...|...|...{...{...{...{...{...{...{...{...{...{...{...{...{...{...{...{.... - 563,216 (1.30%) bytes.
Если так, как бы вы предложили отследить его? Если это не так, знаете ли вы, что это за байтовые данные?
1 ответ
Проблема с heapdumps заключается в том, что вам действительно необходимо знать, что является нормальным и ненормальным в отношении поведения вашего приложения. "Подозреваемые утечки" могут дать вам индикатор, но это также может поставить вас не на ту ногу.
Чтобы выяснить, являются ли размеры байтовых массивов проблемой, вы можете проверить их путь к корню GC. Это, по крайней мере, скажет вам, где были созданы байтовые массивы.
При использовании MAT я лично всегда смотрю на дерево доминаторов. Он должен показать вам самые большие объекты. Оттуда вы также можете группировать по классу загрузчик и т. Д.
Это должно дать вам больше понимания.