Jacks, gij and the GC
Christopher Marshall
christopherlmarshall@yahoo.com
Fri Apr 23 14:31:00 GMT 2004
I am trying to use the GC_MAXIMUM_HEAP_SIZE environment variable to limit heap usage and I can't
get it to work.
I wrote a simple java program to allocate a large array on the heap:
import java.io.*;
public class heap {
public static void main(String args[]) throws Exception {
int n=Integer.parseInt(args[0]);
System.out.println("about to allocate double array with "+n+" elements");
Thread.sleep(10*1000);
double x[]= new double[n];
for (int i=0; i<n; i++){
x[i]= 2.0;
}
System.out.println("array allocated");
Thread.sleep(10*1000);
}
}
And I use the following bash script run it:
#!/bin/bash
export GC_MAXIMUM_HEAP_SIZE=1000000
./heap 1000000 &
#gij -mx 1000000 heap 100000 &
xterm -e "top p $!"
When I run it under gij, the -mx option causes an OutOfMemory exception to be thrown.
When I run it as a native binary, however, the environment variable doesn't seem to limit the heap
size.
What am I missing?
Here is my Makefile:
all:
gcj --classpath=. -c heap.java -o heap.o
gcj --classpath=. -C heap.java
gcj --main=heap -o heap heap.o
Chris Marshall
--- Bryce McKinlay <mckinlay@redhat.com> wrote:
> Ranjit Mathew wrote:
>
> >Anyways, to cut a long story short, I have
> >these questions:
> >
> >1. Doesn't anyone else see this behaviour on Linux?
> >
> >2. Why should the GC print out the "GC Warning" if
> > we are throwing an OutOfMemoryError anyway?
> >
> >
>
> It shouldn't. I think we should be able to fix things so that an
> OutOfMemoryError gets thrown correctly, if you have set a maximum heap
> size. Like Andrew says, its harder to get things right when the heap is
> unbounded. I suspect the kernel should probably end up killing your app
> before virtual memory is really exhausted.
>
> >4. Is there an option corresponding to "-mx" to limit
> > the heap size for natively compiled executables?
> >
> >
>
> There is the GC_MAXIMUM_HEAP_SIZE environment variable. However one
> thing I want to add is a GCJ_ARGS environment variable so that you can
> specify runtime arguments when running a gcj compiled application in a
> similar way to what you'd do when running gij. For example:
>
> GCJ_ARGS="-mx=64m" ./mygcjapp
>
> Regards
>
> Bryce.
>
__________________________________
Do you Yahoo!?
Yahoo! Photos: High-quality 4x6 digital prints for 25¢
http://photos.yahoo.com/ph/print_splash
More information about the Java
mailing list