Skip to content

Commit 8d529bc

Browse files
committed
8364518: Support for Job Objects in os::commit_memory_limit() on Windows
Reviewed-by: ayang, dholmes
1 parent ca41644 commit 8d529bc

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

src/hotspot/os/windows/os_windows.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3297,10 +3297,28 @@ static char* map_or_reserve_memory_aligned(size_t size, size_t alignment, int fi
32973297
}
32983298

32993299
size_t os::commit_memory_limit() {
3300-
MEMORYSTATUSEX ms;
3301-
ms.dwLength = sizeof(ms);
3302-
GlobalMemoryStatusEx(&ms);
3303-
return (size_t)ms.ullAvailVirtual;
3300+
JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = {};
3301+
BOOL res = QueryInformationJobObject(nullptr, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli), nullptr);
3302+
3303+
if (!res) {
3304+
char buf[512];
3305+
size_t buf_len = os::lasterror(buf, sizeof(buf));
3306+
warning("Attempt to query job object information failed: %s", buf_len != 0 ? buf : "<unknown error>");
3307+
3308+
// Conservatively assume no limit when there was an error calling QueryInformationJobObject.
3309+
return SIZE_MAX;
3310+
}
3311+
3312+
if (jeli.BasicLimitInformation.LimitFlags & JOB_OBJECT_LIMIT_PROCESS_MEMORY) {
3313+
return jeli.ProcessMemoryLimit;
3314+
}
3315+
3316+
if (jeli.BasicLimitInformation.LimitFlags & JOB_OBJECT_LIMIT_JOB_MEMORY) {
3317+
return jeli.JobMemoryLimit;
3318+
}
3319+
3320+
// No limit
3321+
return SIZE_MAX;
33043322
}
33053323

33063324
size_t os::reserve_memory_limit() {

0 commit comments

Comments
 (0)