Changeset 229
- Timestamp:
- Jan 8, 2011, 3:48:55 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/README.OS2
r225 r229 55 55 56 56 57 MEMORY REQUIREMENTS 58 59 Sometimes you may find out that starting a Java application fails with the 60 following error message: 61 62 Error occured during initialization of VM 63 Could not reserve enough space for object heap 64 Could not create the Java virtual machine. 65 66 This means that the amount of memory Java wants to reserve for its heap is 67 bigger than the maximum free block of memory available to the Java process. 68 Note that the size of this free block does not directly depend on the amount 69 of physical RAM installed in your computer (because the physical RAM may be 70 extended using the swap file, for instance). It rather depends on the virtual 71 address limit set by OS/2 for the process. In older OS/2 versions that don't 72 support high memory (e.g. the ones based on pre-WSeB kernels) this limit 73 is known to be 512M. In later versions it is controlled by the 74 VIRTUALADDRESSLIMIT parameter in CONFIG.SYS (which is specified in megabytes 75 and defaults to 1024M). 76 77 Furthermore, not all memory within the virtual address limit is available to 78 the process. Some small fraction of it is used by the kernel and the rest is 79 divided in two more or less equal parts: the private arena and the shared 80 arena. As said, the size of these arenas does not depend on the amount of 81 physical RAM and can be approximated using the following table. Note that the 82 values in the table are not the initial arena sizes but rather the sizes of 83 the maximum free block of memory available in the corresponding arena to a 84 dummy process that does nothing but queries these system values (all numbers 85 are in MB, the first column is for systems with no high memory support): 86 87 VIRTUALADDRESSLIMIT *512 | 1024 | 1536 | 2048 | 3072 88 ------------------------------------------------------------------- 89 Max free block in private arena 267 | 432 | 880 | 1328 | 2224 90 Max free block in shared arena 228 | 404 | 852 | 1230 | 2196 91 92 Note that these values are gathered on a default eCS 2.0 GA system and may 93 vary depending on what system DLLs get loaded into each process, they are 94 given only as an example. You may get the real values on your system with 95 a variety of tools gathering system information, such as THESEUS. 96 97 On the other hand, when calculating the default amount of memory to reserve 98 for the the heap (which is called the maximum heap size in the documentation), 99 Java uses the physical RAM size as a base, not the the size of the free block 100 in the private arena (where Java actually allocates the heap). Below is a 101 simplified version of the algorithm for these calculations: 102 103 1. Use MIN (MaxRAM, <physical_RAM>) as the base RAM value. MaxRAM is a Java[ 104 constant that defaults to 1G for the client (regular) Java virtual machine 105 and 4G for the server JVM. 106 107 2. Divide this base RAM value by MaxRAMFraction (4 by default) and assign the 108 result as the default value for the maximum heap size (MaxHeapSize). 109 110 3. Use the MaxHeapSize value increased by 20-30% (for the needs other than the 111 Java heap) as the size of the private memory block to allocate. 112 113 So, if your machine has, say, 2G of RAM and you attempt to start it in server 114 mode (using the -server command line option), Java will want 512M (2G/4) plus 115 additional 20-30%. This would obviously not fit into 432M of free private 116 memory available for the process when VIRTUALADDRESSLIMIT is set to 1024 and 117 it was the case with earlier releases of OpenJDK 6 for OS/2 as well as with 118 the releases of InnoTek Java 1.4.x for OS/2. 119 120 Starting with version 6 Beta 2, OpenJDK for OS/2 solves this problem by 121 limiting the amount of memory Java wants for the heap to the actual size of 122 the available memory block in the private arena. So, in the above case Java 123 would actually get about 310M in server mode (instead of the requested 512M). 124 You may change this limit by changing VIRTUALADDRESSLIMIT in CONFIG.SYS 125 (according to the table above), but please note that values higher than 1024 126 may cause problems with some drivers (for example, it is known that JFS and 127 HPFS386 drivers cannot allocate a disk cache of the big size if the 128 VIRTUALADDRESSLIMIT value is too high). 129 130 In either case, the above describes how Java calculates the defaulut maximum 131 heap size. You may always override this default using the -Xmx<size> Java 132 command line option if you are not satisfied with the default value for some 133 reason or if your applcation gives you the "Could not reserve enough space for 134 object heap" message at startup. However, keep in mind that if you a -Xmx 135 value which is bigger than the maximum free block in the private arena, you 136 will get the same error and will have to decrease the requested size until it 137 succeeds. 138 139 140 57 141 CURRENT LIMITATIONS 58 142 … … 69 153 If you want to disable anti-aliasing, you may use the following Java 70 154 command line argument: 71 155 72 156 -Dawt.useSystemAAFontSettings=off 73 157
Note:
See TracChangeset
for help on using the changeset viewer.