Hello!

I've been looking around trying to find a definitive answer on this
with no success, perhaps you guys can give me something concrete?
Also, it doesn't help that Android dev has teamed up with the
StackOverflow website, as it means that any questions relating to
ACTUAL StackOverflows have become ungoogleable. :)

What are the size and depth limits of an application stack?

My app crashes like this:

D/dalvikvm(22372): GC freed 10879 objects / 721064 bytes in 117ms
E/AndroidRuntime(22372): java.lang.StackOverflowError
E/AndroidRuntime(22372):        at java.nio.ByteBuffer.<init>
(ByteBuffer.java:136)
E/AndroidRuntime(22372):        at java.nio.BaseByteBuffer.<init>
(BaseByteBuffer.java:28)
E/AndroidRuntime(22372):        at java.nio.HeapByteBuffer.<init>
(HeapByteBuffer.java:49)
E/AndroidRuntime(22372):        at java.nio.HeapByteBuffer.<init>
(HeapByteBuffer.java:45)
E/AndroidRuntime(22372):        at java.nio.ReadWriteHeapByteBuffer.<init>
(ReadWriteHeapByteBuffer.java:49)
E/AndroidRuntime(22372):        at java.nio.BufferFactory.newByteBuffer
(BufferFactory.java:51)
E/AndroidRuntime(22372):        at java.nio.ByteBuffer.allocate
(ByteBuffer.java:54)
E/AndroidRuntime(22372):        at java.nio.charset.CharsetEncoder.encode
(CharsetEncoder.java:351)
E/AndroidRuntime(22372):        at java.nio.charset.Charset.encode
(Charset.java:711)
E/AndroidRuntime(22372):        at java.lang.String.getBytes(String.java:
945)
E/AndroidRuntime(22372):        at org.apache.harmony.luni.util.Util.getBytes
(Util.java:54)
E/AndroidRuntime(22372):        at java.io.File.properPath(File.java:1303)
E/AndroidRuntime(22372):        at java.io.FileInputStream.<init>
(FileInputStream.java:80)
E/AndroidRuntime(22372):        at org.eclipse.jgit.util.IO.readFully
(IO.java:86)
E/AndroidRuntime(22372):        at org.eclipse.jgit.util.IO.readFully
(IO.java:67)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.lib.UnpackedObjectLoader.<init>
(UnpackedObjectLoader.java:76)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.lib.ObjectDirectory.openObject2(ObjectDirectory.java:
254)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.lib.ObjectDatabase.openObjectImpl2
(ObjectDatabase.java:231)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.lib.ObjectDatabase.openObject(ObjectDatabase.java:
196)
E/AndroidRuntime(22372):        at org.eclipse.jgit.lib.Repository.openObject
(Repository.java:274)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.verifySafeObject(IndexPack.java:
752)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:439)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltaChain
(IndexPack.java:483)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveChildDeltas(IndexPack.java:
477)
E/AndroidRuntime(22372):        at
org.eclipse.jgit.transport.IndexPack.resolveDeltas(IndexPack.java:444)

To make the stack bigger, I tried running it in a thread with an
increased size:

        long l = 2097152;
        final ThreadGroup tg = new ThreadGroup("biggerthreads");
        Runnable r = new Runnable(){
                public void run(){
                        myCodeIsInHere();
                }
        };

        final Thread t = new Thread(tg, r, "threadr", l);
        t.run();

But I haven't found a definitive value for how large that stack can be
(or even if this method actually works), just something on the web
which said '256k,' which wasn't very helpful.

Can somebody explain to me about more about how the stack works in
android? It feels like I'm hitting an arbitrary boundary here rather
than an actual device limitation, so I'd like to know a bit more about
how I can avoid this. I'd greatly prefer to run this thread in a
bloated stack than refactor the innards of my code if at all possible
(programmers are lazy, don'tcha know), and this is a once-in-a-
lifetype type operation that the user can be told to sit and wait
through anyway.

Thanks so much!
Rich

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to