<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix"><br>
Hi Bengt,<br>
My memory was that all that weird code for aligning windows mmap
space was for CDS. Can you try your test with -Xshare:dump and
-Xshare:on -version?<br>
thanks,<br>
Coleen<br>
<br>
On 4/25/2013 7:09 AM, Bengt Rutisson wrote:<br>
</div>
<blockquote cite="mid:51790ED2.8020407@oracle.com" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<br>
Hi everyone,<br>
<br>
Could I have a couple of reviews of this change?<br>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Ebrutisso/8012915/webrev.00/">http://cr.openjdk.java.net/~brutisso/8012915/webrev.00/</a><br>
<br>
Background from the CR:<br>
<br>
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
The method ReservedSpace::align_reserved_region() does not work on
Windows. It tries to free parts of the previously allocated memory
by doing two calls to os::release_memory(). However, on Windows
os::release_memory() is implemented as: <br>
<br>
VirtualFree(addr, 0, MEM_RELEASE) <br>
<br>
which will always free up all the allocated memory: <br>
<br>
<a moz-do-not-send="true"
href="http://msdn.microsoft.com/en-gb/library/windows/desktop/aa366892%28v=vs.85%29.aspx">http://msdn.microsoft.com/en-gb/library/windows/desktop/aa366892%28v=vs.85%29.aspx</a>
<br>
<br>
"The function frees the entire region that is reserved in the
initial allocation call to VirtualAlloc." <br>
<br>
This means that if ReservedSpace::align_reserved_region() is
executed on Windows and we try to trim the beginning of the memory
that we had allocated we will free all of the allocated memory.
Subsequent calls to os::commit_memory() which will end up as: <br>
<br>
VirtualAlloc(addr, bytes, MEM_COMMIT, PAGE_READWRITE) <br>
<br>
will fail with 487, ERROR_INVALID_ADDRESS - Attempt to access
invalid address. <br>
<br>
The solution is to use the existing method
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
os::reserve_memory_aligned() which does the same thing but works
on all platforms.<br>
<br>
I assume that it is unusual that we enter this code path since I
haven't seen a lot of crashes that seem related to this issue. But
when we tried a patch that plays a bit with the alignments we
crash on Windows. To have a simple reproducer I added a unit test.
The test is not 100% fool proof, but on Windows without my
proposed fix it fails 999 times out of 1000 runs. With my fix it
passes 100% of the time.<br>
<br>
Thanks,<br>
Bengt<br>
</blockquote>
<br>
</body>
</html>