|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.mmtk.utility.heap.PageResource
org.mmtk.utility.heap.MonotonePageResource
public final class MonotonePageResource
This class manages the allocation of pages for a space. When a page is requested by the space both a page budget and the use of virtual address space are checked. If the request for space can't be satisfied (for either reason) a GC may be triggered.
| Field Summary | |
|---|---|
private Address |
currentChunk
|
private Address |
cursor
Instance variables |
private int |
metaDataPagesPerRegion
|
private Address |
sentinel
|
| Fields inherited from class org.mmtk.utility.heap.PageResource |
|---|
committed, contiguous, required, reserved, space, start, ZERO_ON_RELEASE |
| Constructor Summary | |
|---|---|
MonotonePageResource(int pageBudget,
Space space,
Address start,
Extent bytes,
int metaDataPagesPerRegion)
Constructor Contiguous monotone resource. |
|
MonotonePageResource(int pageBudget,
Space space,
int metaDataPagesPerRegion)
Constructor Discontiguous monotone resource. |
|
| Method Summary | |
|---|---|
int |
adjustForMetaData(int pages)
Adjust a page request to include metadata requirements, if any. |
int |
adjustForMetaData(int pages,
Address begin)
Adjust a page request to include metadata requirements, if any. |
protected Address |
allocPages(int requestPages)
Allocate pages pages from this resource. |
int |
getAvailablePhysicalPages()
Return the number of available physical pages for this resource. |
private static Address |
getRegionStart(Address addr)
|
private boolean |
moveToNextChunk()
Adjust the start and cursor fields to point to the next chunk in the linked list of chunks tied down by this page resource. |
private void |
releasePages()
Release all pages associated with this page resource, optionally zeroing on release and optionally memory protecting on release. |
private void |
releasePages(Address first,
Extent bytes)
Release a range of pages associated with this page resource, optionally zeroing on release and optionally memory protecting on release. |
void |
reset()
Reset this page resource, freeing all pages and resetting reserved and committed pages appropriately. |
void |
reusePages(int pages)
Notify that previously unused pages are in use again. |
void |
unusePages(int pages)
Notify that several pages are no longer in use. |
| Methods inherited from class org.mmtk.utility.heap.PageResource |
|---|
clearRequest, commitPages, committedPages, cumulativeCommittedPages, getNewPages, lock, requiredPages, reservedPages, reservePages, unconditionallyReleasePages, unconditionallyReservePages, unlock |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private Address cursor
private Address sentinel
private final int metaDataPagesPerRegion
private Address currentChunk
| Constructor Detail |
|---|
public MonotonePageResource(int pageBudget,
Space space,
Address start,
Extent bytes,
int metaDataPagesPerRegion)
pageBudget - The budget of pages available to this memory
manager before it must poll the collector.space - The space to which this resource is attachedstart - The start of the address range allocated to this resourcebytes - The size of the address rage allocated to this resourcemetaDataPagesPerRegion - The number of pages of meta data
that are embedded in each region.
public MonotonePageResource(int pageBudget,
Space space,
int metaDataPagesPerRegion)
pageBudget - The budget of pages available to this memory
manager before it must poll the collector.space - The space to which this resource is attachedmetaDataPagesPerRegion - The number of pages of meta data
that are embedded in each region.| Method Detail |
|---|
public int getAvailablePhysicalPages()
Note: This just considers physical pages (ie virtual memory pages allocated for use by this resource). This calculation is orthogonal to and does not consider any restrictions on the number of pages this resource may actually use at any time (ie the number of committed and reserved pages).
Note: The calculation is made on the assumption that all space that could be assigned to this resource would be assigned to this resource (ie the unused discontiguous space could just as likely be assigned to another competing resource).
getAvailablePhysicalPages in class PageResourceprotected Address allocPages(int requestPages)
pages pages from this resource. Simply
bump the cursor, and fail if we hit the sentinel.If the request can be satisfied, then ensure the pages are mmpapped and zeroed before returning the address of the start of the region. If the request cannot be satisfied, return zero.
allocPages in class PageResourcerequestPages - The number of pages to be allocated.
public int adjustForMetaData(int pages)
In this case we simply report the expected page cost. We can't use worst case here because we would exhaust our budget every time.
adjustForMetaData in class PageResourcepages - The size of the pending allocation in pages
public int adjustForMetaData(int pages,
Address begin)
Note that there could be a race here, with multiple threads each adjusting their request on account of the same single metadata region. This should not be harmful, as the failing requests will just retry, and if multiple requests succeed, only one of them will actually have the metadata accounted against it, the others will simply have more space than they originally requested.
pages - The size of the pending allocation in pagesbegin - The start address of the region assigned to this pending
request
private static Address getRegionStart(Address addr)
public void reset()
public void unusePages(int pages)
pages - The number of pagespublic void reusePages(int pages)
pages - The number of pagesprivate void releasePages()
private boolean moveToNextChunk()
private void releasePages(Address first,
Extent bytes)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||