This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: Garbage collector: Out of memory (when running AWT/SWING code on arm-linux)
- From: Andrew Haley <aph at redhat dot com>
- To: ffileppo <ffileppo at libero dot it>
- Cc: java <java at gcc dot gnu dot org>
- Date: Mon, 09 Jun 2008 10:19:23 +0100
- Subject: Re: Garbage collector: Out of memory (when running AWT/SWING code on arm-linux)
- References: <K26S67$21468ECFF4CDE2087BA8171E85CEC07D@libero.it>
ffileppo wrote:
>> ffileppo wrote:
>>>> Hi guys,
>>>>
>>>> I'm getting the following error:
>>>>
>>>> GC Warning: Out of Memory! Returning NIL!
>>>>
>>>> when I try to run any AWT/SWING code compiled with arm-linux-gcj on my embedded box (PXA270 - 128MB Ram). (Other code just runs fine)
>>>>
>>>> For example this code:
>>>>
>>>> import javax.swing.*;
>>>>
>>>> public class SimpleFrame {
>>>> public static void main(String args[]) {
>>>> System.out.println("Check 1");
>>>> JFrame f = new JFrame("Simple Frame");
>>>> System.out.println("Check 2");
>>>> f.setSize(200,100);
>>>> f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>>>> f.setVisible(true);
>>>> }
>>>> }
>>>>
>>>> gives out of memory error after printing "Check 1".
>>>> Trying with some other code I can see that the first AWT/SWING call causes this error.
>>>>
>>>> Any idea to fix / debug this problem?
>> I think I've found it. The unwinder is infinitely looping 'til it runs out
>> of memory.
>>
>> Some library somewhere has probably has invalid unwind information.
>>
>> Add this line to _Jv_StackTrace::UnwindTraceFn in stacktrace.cc:
>>
>> *** stacktrace.cc~ Tue Sep 4 19:00:31 2007
>> --- stacktrace.cc Fri Jun 6 17:42:25 2008
>> ***************
>> *** 110,115 ****
>> --- 110,117 ----
>> // Check if the trace buffer needs to be extended.
>> if (pos == state->length)
>> {
>> + return _URC_END_OF_STACK;
>> +
>> int newLength = state->length * 2;
>> void *newFrames = _Jv_AllocBytes (newLength * sizeof(_Jv_StackFrame));
>> memcpy (newFrames, state->frames, state->length * sizeof(_Jv_StackFrame));
>>
>> This will prevent more than 100 stack frames from being traced.
>
> I confirm it's working now.
>
> Thank you Andrew, you saved me...again
OK, right. I'm going to have to fix this one properly: it's a serious bug
that prevents anyone from running any GUI applications on gcj/ARM eabi.
Andrew.