This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Garbage collector: Out of memory (when running AWT/SWING code on arm-linux)


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.

Andrew.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]