Comments (17)
This is very interesting. It's happening in the service process, so that's when we're processing a heap dump.
from leakcanary.
It was on my first run with leakcanary enabled... will try to reproduce later...
from leakcanary.
Could you find the root of the stack in logcat? I'd like to know in which part of LeakCanary code this happened.
from leakcanary.
My best bet here is that this happens when we try to start AbstractAnalysisResultService
because we need to pass some serializable data back to the original process (and the stacktrace says write
).
HeapDump
doesn't have a deep hierarchy. AnalysisResult
has LeakTrace
and Exception
, so basically it could be that LeakTrace
has a very long list of LeakTraceElement
(but it's an unmodifiable array list so not sure that could trigger it), or Exception
has a very deep stacktrace / causes.
I will close for now, please reopen or create a new one if you can get more info.
from leakcanary.
Hi @pyricau , I also got this StackOverFlow on my first run with LeakCanary. My Logcat is similar but not equal to @luciofm
I/dalvikvm( 1761): threadid=11: stack overflow on call to Ljava/io/SerializationHandleMap;.get:IL
I/dalvikvm( 1761): method requires 16+20+12=48 bytes, fp is 0x9559b31c (28 left)
I/dalvikvm( 1761): expanding stack end (0x9559b300 to 0x9559b000)
I/dalvikvm( 1761): Shrank stack (to 0x9559b300, curFrame is 0x9559b488)
W/dalvikvm( 1761): threadid=11: thread exiting with uncaught exception (group=0xa4d00b20)
E/AndroidRuntime( 1761): FATAL EXCEPTION: IntentService[HeapAnalyzerService]
E/AndroidRuntime( 1761): Process: org.microhealth.ostheoarthritis:leakcanary, PID: 1761
E/AndroidRuntime( 1761): java.lang.StackOverflowError
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.dumpCycle(ObjectOutputStream.java:425)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1566)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewArray(ObjectOutputStream.java:1205)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1662)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.util.ArrayList.writeObject(ArrayList.java:648)
E/AndroidRuntime( 1761): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1761): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.util.ArrayList.writeObject(ArrayList.java:648)
E/AndroidRuntime( 1761): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1761): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
E/AndroidRuntime( 1761): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
E/AndroidRuntime( 1761): at java.util.ArrayList.writeObject(ArrayList.java:648)
E/AndroidRuntime( 1761): at java.lang.reflect.Method.i
Let me know if I can help, as I've been able to isolate it to 1 specifc use case.
Plus, after the crash I'm seeing this message in Logcat
D/AndroidHeapDumper( 1256): Could not dump heap, previous analysis still is in progress.
Maybe you can reopen the issue?
from leakcanary.
Is this systematic?
from leakcanary.
yes, it happens every time.
from leakcanary.
Can you attach a debugger? Would be really handy if you could put a breakpoint in the StackOverflowError constructor to see what chain of objects it's attempting to serialize.
from leakcanary.
@swankjesse The crash doesn't happen when I attach a debugger, but it occurs systematically without it.
I'm going to try to add it as a local dependency and see if I can Log something. Any hint?
from leakcanary.
It's only happening on Android 4.4.4, it seems to work well on Lollipop. And, one time it also worked well on KitKat. I haven't been able to capture any log, sorry.
I've tested on Genymotion Nexus 4 and a real device One Plus One still on CM 11
from leakcanary.
@Maragues I bet crash doesn't happen with debugger attached because of this
from leakcanary.
Happening to me too on Android 4.3
from leakcanary.
Finally got correct stacktrace:
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
at org.eclipse.mat.parser.internal.SnapshotImpl.create(SnapshotImpl.java:184)
at org.eclipse.mat.parser.internal.SnapshotImplBuilder.create(SnapshotImplBuilder.java:94)
at org.eclipse.mat.parser.internal.SnapshotFactory.parse(SnapshotFactory.java:201)
at org.eclipse.mat.parser.internal.SnapshotFactory.openSnapshot(SnapshotFactory.java:106)
at com.squareup.leakcanary.HeapAnalyzer.openSnapshot(HeapAnalyzer.java:136)
at com.squareup.leakcanary.HeapAnalyzer.checkForLeak(HeapAnalyzer.java:89)
at com.squareup.leakcanary.internal.HeapAnalyzerService.onHandleIntent(HeapAnalyzerService.java:57)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
from leakcanary.
Thanks @vovkab. Damn, it's in haha. Which means it's going to be a nightmare.
from leakcanary.
Culprit: out.writeObject(answer.classCache);
We could spend some time improve the serialized classes to avoid recursive calls. But after looking at it, I realized that the whole point is to save the parsing so that it can be reopened quickly later without reparsing the heapdump. We don't care about that. So we can probably get away with remove that part entirely.
from leakcanary.
Fix in HAHA here: square/haha#4
from leakcanary.
Not just yet, need to update leakcanary.
from leakcanary.
Related Issues (20)
- Doc issue with recipes/ page
- Temporary leak in Android SDK when hovering over a view that has a tooltip HOT 2
- Doc issue with fundamentals-how-leakcanary-works/ page
- Is it correct to mark fragment leaks when mFragmentManager is null? HOT 2
- [Library Leak] Navigation component 2.7.1 HOT 3
- IllegalArgumentException: Object id {id} not found in heap dump. HOT 2
- Android 14 One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED HOT 4
- Leak Canary Crash HOT 2
- Add `AwContents.f` to known library leaks HOT 7
- 8d8b5144a75330d3121abc5c7201161d4bf7675a
- Couldn't open dumped heap - due to missing read/write permissions HOT 1
- shark-cli not working HOT 2
- Documentation - Link to AndroidReferenceMatchers path in github is outdated
- :)
- This is a strange question HOT 1
- v2.12 tag accidentally on wrong branch? HOT 1
- leakcary of this HOT 4
- Memory leak detected in ViewDataBinding.sReferenceQueue HOT 3
- targetSdkVersion 34 cause missingForegroundServiceTypeException HOT 1
- InputMethodManager.mImeInsetsConsumer leaking in API 30
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from leakcanary.