hotspot/src/os/bsd/vm/os_bsd.cpp
changeset 20683 7b211e525ab8
parent 20377 393ee12eccc8
child 21185 9d53434b1ef5
child 21123 1370c7b2f97c
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp	Fri Oct 11 22:22:19 2013 -0400
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp	Sat Oct 12 13:09:18 2013 -0400
@@ -159,9 +159,21 @@
   return Bsd::available_memory();
 }
 
+// available here means free
 julong os::Bsd::available_memory() {
-  // XXXBSD: this is just a stopgap implementation
-  return physical_memory() >> 2;
+  uint64_t available = physical_memory() >> 2;
+#ifdef __APPLE__
+  mach_msg_type_number_t count = HOST_VM_INFO64_COUNT;
+  vm_statistics64_data_t vmstat;
+  kern_return_t kerr = host_statistics64(mach_host_self(), HOST_VM_INFO64,
+                                         (host_info64_t)&vmstat, &count);
+  assert(kerr == KERN_SUCCESS,
+         "host_statistics64 failed - check mach_host_self() and count");
+  if (kerr == KERN_SUCCESS) {
+    available = vmstat.free_count * os::vm_page_size();
+  }
+#endif
+  return available;
 }
 
 julong os::physical_memory() {