JVM 32bits Xmx limitation

John Coomes John.Coomes at sun.com
Wed Jul 29 09:57:42 PDT 2009

Ken-- at newsgroupstats.hk (dragonken at gmail.com) wrote:
> Hi All,
> I have an old java application running on old 32bits windows 2000 server, 2G
> Ram with JDK5. Originally I can startup my apps with -Xmx1412M. It's work
> for a year. One day, I restart windows but fail to start my app. It said
> 'Could not reserve enough space for object heap'. I have to decrease the Xmx
> to 1200M to make it work. Please advise.
> The server reboots everyday. No windows updates (and no software newly
> installed) for 3 months.

This is most likely because the JVM can't get a contiguous range of
virtual addresses for the java heap.  32-bit windows reserves half for
its own use, so everything else has to live in 2G.

Something changed to reduce the size of the largest available range of
addresses.  Most often it's a windows update, but we've also seen some
correlation with virus scanner updates--there's a current thread on
the java forums discussing a similar problem when running Sophos AV.

> I increase the physical memory to 4GB, it didn't help.
> Any workaround?

There used to be a utility on sysinternals.com that would print out
what address ranges were in use and what was using them.  I can't find
it now, but process explorer might give you that info.  You might be
able to see what's taking up the space and use the 'rebase' utility to
relocate things (including the JDK itself).


More information about the hotspot-gc-dev mailing list