When the JVM initializes, it tries to allocate its heap using the -Xms setting. The base addresses of Application Server DLLs can restrict the amount of contiguous address space available, causing JVM initialization to fail. The amount of contiguous address space available for Java memory varies depending on the base addresses assigned to the DLLs. You can increase the amount of contiguous address space available by rebasing the Application Server DLLs.
To prevent load address collisions, set preferred base addresses with the rebase utilty that comes with Visual Studio and the Platform SDK. Use the rebase utility to reassign the base addresses of the Application Server DLLs to prevent relocations at load time and increase the available process memory for the Java heap.
There are a few Application Server DLLs that have non-default base addresses that can cause collisions. For example:
The nspr libraries have a preferred address of 0x30000000.
The icu libraries have the address of 0x4A?00000.
Move these libraries near the system DLLs (msvcrt.dll is at 0x78000000) to increase the available maximum contiguous address space substantially. Since rebasing can be done on any DLL, rebase to the DLLs after installing the Application Server.
To perform rebasing, you need:
Visual Studio and the Microsoft Framework SDK rebase utility
Make install_dir\ bin the default directory.
Enter this command:
rebase -b 0x6000000 *.dll
Use the dependencywalker utility to make sure the DLLs were rebased correctly.
For more information, see the Dependency Walker website.
Increase the size for the Java heap, and set the JVM Option accordingly on the JVM Settings page in the Admin Console.
Restart the Application Server.
This is an example heap configuration used by Sun GlassFish Enterprise Server for heavy server-centric applications, on Windows, as set in the domain.xml file.
<jvm-options> -Xms1400m </jvm-options> <jvm-options> -Xmx1400m </jvm-options>
For more information on rebasing, see MSDN documentation for rebase utility.