patch: autoadjust datasegment size
Arne H. Juul
arnej at pvv.ntnu.no
Thu Feb 22 21:12:03 UTC 2007
We're running in an environment where the default datasegment size is
often adjusted upwards to provide more address space for applications that
allocate a lot of memory, but this causes the Java VM to fail during
startup since the Java heap is allocated outside the data segment by using
mmap(). I've been compiling with a patch (below) that auto-adjusts the
datasegment down to a "reasonable" value.
I don't know enough about the details of the VM system of the various BSDs
to be certain that this is generally applicable, but my guess is that this
will be useful on all 32-bit BSDs.
- Arne H. J.
diff -ru jdk-1_5_0_11.b4/hotspot/src/os/bsd/vm/os_bsd.cpp jdk-1_5_0_11.ahj12/hotspot/src/os/bsd/vm/os_bsd.cpp
--- jdk-1_5_0_11.b4/hotspot/src/os/bsd/vm/os_bsd.cpp Sun Feb 18 16:13:42 2007
+++ jdk-1_5_0_11.ahj12/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Feb 20 22:29:27 2007
@@ -2706,7 +2833,30 @@
// this is called _after_ the global arguments have been parsed
jint os::init_2(void) {
-
+
+ // XXX ugly hack for 32-bit address space, since we know the
+ // java heap is allocated with mmap() not sbrk():
+#if SSIZE_MAX == 0x7fffffff
+ // set the max datasegment size to something reasonable
+ // complain if getrlimit/setrlimit fails but continue regardless.
+ struct rlimit dseg_size;
+ int status = getrlimit(RLIMIT_DATA, &dseg_size);
+ if (status != 0) {
+ if (PrintMiscellaneous && (Verbose || WizardMode))
+ perror("os::init_2 getrlimit failed");
+ } else {
+ if (dseg_size.rlim_max > 1000 * 1024 * 1024) {
+ dseg_size.rlim_max = 500 * 1024 * 1024;
+ dseg_size.rlim_cur = 500 * 1024 * 1024;
+ status = setrlimit(RLIMIT_DATA, &dseg_size);
+ if (status != 0) {
+ if (PrintMiscellaneous && (Verbose || WizardMode))
+ perror("os::init_2 setrlimit failed");
+ }
+ }
+ }
+#endif
+
// Allocate a single page and mark it as readable for safepoint polling
if( SafepointPolling ) {
address polling_page = (address) ::mmap(NULL, page_size,
More information about the freebsd-java
mailing list