Merge
This commit is contained in:
commit
4b983d3b39
@ -1110,7 +1110,7 @@ static jstring getPlatformEncoding(JNIEnv *env) {
|
|||||||
if (propname) {
|
if (propname) {
|
||||||
jclass cls;
|
jclass cls;
|
||||||
jmethodID mid;
|
jmethodID mid;
|
||||||
NULL_CHECK0 (cls = (*env)->FindClass(env, "java/lang/System"));
|
NULL_CHECK0 (cls = FindBootStrapClass(env, "java/lang/System"));
|
||||||
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
||||||
env, cls,
|
env, cls,
|
||||||
"getProperty",
|
"getProperty",
|
||||||
@ -1125,7 +1125,7 @@ static jstring getPlatformEncoding(JNIEnv *env) {
|
|||||||
static jboolean isEncodingSupported(JNIEnv *env, jstring enc) {
|
static jboolean isEncodingSupported(JNIEnv *env, jstring enc) {
|
||||||
jclass cls;
|
jclass cls;
|
||||||
jmethodID mid;
|
jmethodID mid;
|
||||||
NULL_CHECK0 (cls = (*env)->FindClass(env, "java/nio/charset/Charset"));
|
NULL_CHECK0 (cls = FindBootStrapClass(env, "java/nio/charset/Charset"));
|
||||||
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
||||||
env, cls,
|
env, cls,
|
||||||
"isSupported",
|
"isSupported",
|
||||||
@ -1161,7 +1161,7 @@ NewPlatformString(JNIEnv *env, char *s)
|
|||||||
#else
|
#else
|
||||||
if (isEncodingSupported(env, enc) == JNI_TRUE) {
|
if (isEncodingSupported(env, enc) == JNI_TRUE) {
|
||||||
#endif
|
#endif
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/lang/String"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
|
||||||
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
||||||
"([BLjava/lang/String;)V"));
|
"([BLjava/lang/String;)V"));
|
||||||
str = (*env)->NewObject(env, cls, mid, ary, enc);
|
str = (*env)->NewObject(env, cls, mid, ary, enc);
|
||||||
@ -1172,7 +1172,7 @@ NewPlatformString(JNIEnv *env, char *s)
|
|||||||
the encoding name, in which the StringCoding class will
|
the encoding name, in which the StringCoding class will
|
||||||
pickup the iso-8859-1 as the fallback converter for us.
|
pickup the iso-8859-1 as the fallback converter for us.
|
||||||
*/
|
*/
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/lang/String"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
|
||||||
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
||||||
"([B)V"));
|
"([B)V"));
|
||||||
str = (*env)->NewObject(env, cls, mid, ary);
|
str = (*env)->NewObject(env, cls, mid, ary);
|
||||||
@ -1195,7 +1195,7 @@ NewPlatformStringArray(JNIEnv *env, char **strv, int strc)
|
|||||||
jarray ary;
|
jarray ary;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/lang/String"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
|
||||||
NULL_CHECK0(ary = (*env)->NewObjectArray(env, strc, cls, 0));
|
NULL_CHECK0(ary = (*env)->NewObjectArray(env, strc, cls, 0));
|
||||||
for (i = 0; i < strc; i++) {
|
for (i = 0; i < strc; i++) {
|
||||||
jstring str = NewPlatformString(env, *strv++);
|
jstring str = NewPlatformString(env, *strv++);
|
||||||
@ -1224,6 +1224,7 @@ LoadClass(JNIEnv *env, char *name)
|
|||||||
c = *t++;
|
c = *t++;
|
||||||
*s++ = (c == '.') ? '/' : c;
|
*s++ = (c == '.') ? '/' : c;
|
||||||
} while (c != '\0');
|
} while (c != '\0');
|
||||||
|
// use the application class loader for main-class
|
||||||
cls = (*env)->FindClass(env, buf);
|
cls = (*env)->FindClass(env, buf);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
@ -1250,7 +1251,7 @@ GetMainClassName(JNIEnv *env, char *jarname)
|
|||||||
jobject jar, man, attr;
|
jobject jar, man, attr;
|
||||||
jstring str, result = 0;
|
jstring str, result = 0;
|
||||||
|
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/util/jar/JarFile"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/util/jar/JarFile"));
|
||||||
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
||||||
"(Ljava/lang/String;)V"));
|
"(Ljava/lang/String;)V"));
|
||||||
NULL_CHECK0(str = NewPlatformString(env, jarname));
|
NULL_CHECK0(str = NewPlatformString(env, jarname));
|
||||||
@ -1471,7 +1472,7 @@ PrintJavaVersion(JNIEnv *env)
|
|||||||
jclass ver;
|
jclass ver;
|
||||||
jmethodID print;
|
jmethodID print;
|
||||||
|
|
||||||
NULL_CHECK(ver = (*env)->FindClass(env, "sun/misc/Version"));
|
NULL_CHECK(ver = FindBootStrapClass(env, "sun/misc/Version"));
|
||||||
NULL_CHECK(print = (*env)->GetStaticMethodID(env, ver, "print", "()V"));
|
NULL_CHECK(print = (*env)->GetStaticMethodID(env, ver, "print", "()V"));
|
||||||
|
|
||||||
(*env)->CallStaticVoidMethod(env, ver, print);
|
(*env)->CallStaticVoidMethod(env, ver, print);
|
||||||
|
@ -100,5 +100,15 @@ void* MemAlloc(size_t size);
|
|||||||
* Make launcher spit debug output.
|
* Make launcher spit debug output.
|
||||||
*/
|
*/
|
||||||
extern jboolean _launcher_debug;
|
extern jboolean _launcher_debug;
|
||||||
|
/*
|
||||||
|
* This allows for finding classes from the VM's bootstrap class loader
|
||||||
|
* directly, FindClass uses the application class loader internally, this will
|
||||||
|
* cause unnecessary searching of the classpath for the required classes.
|
||||||
|
*/
|
||||||
|
typedef jclass (JNICALL FindClassFromBootLoader_t(JNIEnv *env,
|
||||||
|
const char *name,
|
||||||
|
jboolean throwError));
|
||||||
|
|
||||||
|
jclass FindBootStrapClass(JNIEnv *env, const char *classname);
|
||||||
|
|
||||||
#endif /* _JAVA_H_ */
|
#endif /* _JAVA_H_ */
|
||||||
|
@ -1826,3 +1826,23 @@ UnsetEnv(char *name)
|
|||||||
{
|
{
|
||||||
return(borrowed_unsetenv(name));
|
return(borrowed_unsetenv(name));
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* The implementation for finding classes from the bootstrap
|
||||||
|
* class loader, refer to java.h
|
||||||
|
*/
|
||||||
|
static FindClassFromBootLoader_t *findBootClass = NULL;
|
||||||
|
|
||||||
|
jclass
|
||||||
|
FindBootStrapClass(JNIEnv *env, const char* classname)
|
||||||
|
{
|
||||||
|
if (findBootClass == NULL) {
|
||||||
|
findBootClass = (FindClassFromBootLoader_t *)dlsym(RTLD_DEFAULT,
|
||||||
|
"JVM_FindClassFromBootLoader");
|
||||||
|
if (findBootClass == NULL) {
|
||||||
|
fprintf(stderr, "Error: could load method JVM_FindClassFromBootLoader");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return findBootClass(env, classname, JNI_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -38,5 +38,6 @@
|
|||||||
// platforms, but they may have different default values on other platforms.
|
// platforms, but they may have different default values on other platforms.
|
||||||
//
|
//
|
||||||
define_pd_global(bool, UseLargePages, false);
|
define_pd_global(bool, UseLargePages, false);
|
||||||
|
define_pd_global(bool, UseLargePagesIndividualAllocation, false);
|
||||||
define_pd_global(bool, UseOSErrorReporting, false);
|
define_pd_global(bool, UseOSErrorReporting, false);
|
||||||
define_pd_global(bool, UseThreadPriorities, true) ;
|
define_pd_global(bool, UseThreadPriorities, true) ;
|
||||||
|
@ -1110,7 +1110,7 @@ static jstring getPlatformEncoding(JNIEnv *env) {
|
|||||||
if (propname) {
|
if (propname) {
|
||||||
jclass cls;
|
jclass cls;
|
||||||
jmethodID mid;
|
jmethodID mid;
|
||||||
NULL_CHECK0 (cls = (*env)->FindClass(env, "java/lang/System"));
|
NULL_CHECK0 (cls = FindBootStrapClass(env, "java/lang/System"));
|
||||||
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
||||||
env, cls,
|
env, cls,
|
||||||
"getProperty",
|
"getProperty",
|
||||||
@ -1125,7 +1125,7 @@ static jstring getPlatformEncoding(JNIEnv *env) {
|
|||||||
static jboolean isEncodingSupported(JNIEnv *env, jstring enc) {
|
static jboolean isEncodingSupported(JNIEnv *env, jstring enc) {
|
||||||
jclass cls;
|
jclass cls;
|
||||||
jmethodID mid;
|
jmethodID mid;
|
||||||
NULL_CHECK0 (cls = (*env)->FindClass(env, "java/nio/charset/Charset"));
|
NULL_CHECK0 (cls = FindBootStrapClass(env, "java/nio/charset/Charset"));
|
||||||
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
NULL_CHECK0 (mid = (*env)->GetStaticMethodID(
|
||||||
env, cls,
|
env, cls,
|
||||||
"isSupported",
|
"isSupported",
|
||||||
@ -1161,7 +1161,7 @@ NewPlatformString(JNIEnv *env, char *s)
|
|||||||
#else
|
#else
|
||||||
if (isEncodingSupported(env, enc) == JNI_TRUE) {
|
if (isEncodingSupported(env, enc) == JNI_TRUE) {
|
||||||
#endif
|
#endif
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/lang/String"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
|
||||||
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
||||||
"([BLjava/lang/String;)V"));
|
"([BLjava/lang/String;)V"));
|
||||||
str = (*env)->NewObject(env, cls, mid, ary, enc);
|
str = (*env)->NewObject(env, cls, mid, ary, enc);
|
||||||
@ -1172,7 +1172,7 @@ NewPlatformString(JNIEnv *env, char *s)
|
|||||||
the encoding name, in which the StringCoding class will
|
the encoding name, in which the StringCoding class will
|
||||||
pickup the iso-8859-1 as the fallback converter for us.
|
pickup the iso-8859-1 as the fallback converter for us.
|
||||||
*/
|
*/
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/lang/String"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
|
||||||
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
||||||
"([B)V"));
|
"([B)V"));
|
||||||
str = (*env)->NewObject(env, cls, mid, ary);
|
str = (*env)->NewObject(env, cls, mid, ary);
|
||||||
@ -1195,7 +1195,7 @@ NewPlatformStringArray(JNIEnv *env, char **strv, int strc)
|
|||||||
jarray ary;
|
jarray ary;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/lang/String"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
|
||||||
NULL_CHECK0(ary = (*env)->NewObjectArray(env, strc, cls, 0));
|
NULL_CHECK0(ary = (*env)->NewObjectArray(env, strc, cls, 0));
|
||||||
for (i = 0; i < strc; i++) {
|
for (i = 0; i < strc; i++) {
|
||||||
jstring str = NewPlatformString(env, *strv++);
|
jstring str = NewPlatformString(env, *strv++);
|
||||||
@ -1224,6 +1224,7 @@ LoadClass(JNIEnv *env, char *name)
|
|||||||
c = *t++;
|
c = *t++;
|
||||||
*s++ = (c == '.') ? '/' : c;
|
*s++ = (c == '.') ? '/' : c;
|
||||||
} while (c != '\0');
|
} while (c != '\0');
|
||||||
|
// use the application class loader for the main-class
|
||||||
cls = (*env)->FindClass(env, buf);
|
cls = (*env)->FindClass(env, buf);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
@ -1250,7 +1251,7 @@ GetMainClassName(JNIEnv *env, char *jarname)
|
|||||||
jobject jar, man, attr;
|
jobject jar, man, attr;
|
||||||
jstring str, result = 0;
|
jstring str, result = 0;
|
||||||
|
|
||||||
NULL_CHECK0(cls = (*env)->FindClass(env, "java/util/jar/JarFile"));
|
NULL_CHECK0(cls = FindBootStrapClass(env, "java/util/jar/JarFile"));
|
||||||
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
NULL_CHECK0(mid = (*env)->GetMethodID(env, cls, "<init>",
|
||||||
"(Ljava/lang/String;)V"));
|
"(Ljava/lang/String;)V"));
|
||||||
NULL_CHECK0(str = NewPlatformString(env, jarname));
|
NULL_CHECK0(str = NewPlatformString(env, jarname));
|
||||||
@ -1471,7 +1472,7 @@ PrintJavaVersion(JNIEnv *env)
|
|||||||
jclass ver;
|
jclass ver;
|
||||||
jmethodID print;
|
jmethodID print;
|
||||||
|
|
||||||
NULL_CHECK(ver = (*env)->FindClass(env, "sun/misc/Version"));
|
NULL_CHECK(ver = FindBootStrapClass(env, "sun/misc/Version"));
|
||||||
NULL_CHECK(print = (*env)->GetStaticMethodID(env, ver, "print", "()V"));
|
NULL_CHECK(print = (*env)->GetStaticMethodID(env, ver, "print", "()V"));
|
||||||
|
|
||||||
(*env)->CallStaticVoidMethod(env, ver, print);
|
(*env)->CallStaticVoidMethod(env, ver, print);
|
||||||
|
@ -101,4 +101,15 @@ void* MemAlloc(size_t size);
|
|||||||
*/
|
*/
|
||||||
extern jboolean _launcher_debug;
|
extern jboolean _launcher_debug;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This allows for finding classes from the VM's bootstrap class loader
|
||||||
|
* directly, FindClass uses the application class loader internally, this will
|
||||||
|
* cause unnecessary searching of the classpath for the required classes.
|
||||||
|
*/
|
||||||
|
typedef jclass (JNICALL FindClassFromBootLoader_t(JNIEnv *env,
|
||||||
|
const char *name,
|
||||||
|
jboolean throwError));
|
||||||
|
|
||||||
|
jclass FindBootStrapClass(JNIEnv *env, const char *classname);
|
||||||
|
|
||||||
#endif /* _JAVA_H_ */
|
#endif /* _JAVA_H_ */
|
||||||
|
@ -1826,3 +1826,24 @@ UnsetEnv(char *name)
|
|||||||
{
|
{
|
||||||
return(borrowed_unsetenv(name));
|
return(borrowed_unsetenv(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The implementation for finding classes from the bootstrap
|
||||||
|
* class loader, refer to java.h
|
||||||
|
*/
|
||||||
|
static FindClassFromBootLoader_t *findBootClass = NULL;
|
||||||
|
|
||||||
|
jclass
|
||||||
|
FindBootStrapClass(JNIEnv *env, const char* classname)
|
||||||
|
{
|
||||||
|
if (findBootClass == NULL) {
|
||||||
|
findBootClass = (FindClassFromBootLoader_t *)dlsym(RTLD_DEFAULT,
|
||||||
|
"JVM_FindClassFromBootLoader");
|
||||||
|
if (findBootClass == NULL) {
|
||||||
|
fprintf(stderr, "Error: could not load method JVM_FindClassFromBootLoader");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return findBootClass(env, classname, JNI_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -44,5 +44,6 @@
|
|||||||
// platforms, but they may have different default values on other platforms.
|
// platforms, but they may have different default values on other platforms.
|
||||||
//
|
//
|
||||||
define_pd_global(bool, UseLargePages, true);
|
define_pd_global(bool, UseLargePages, true);
|
||||||
|
define_pd_global(bool, UseLargePagesIndividualAllocation, false);
|
||||||
define_pd_global(bool, UseOSErrorReporting, false);
|
define_pd_global(bool, UseOSErrorReporting, false);
|
||||||
define_pd_global(bool, UseThreadPriorities, false);
|
define_pd_global(bool, UseThreadPriorities, false);
|
||||||
|
@ -462,18 +462,16 @@ int os::active_processor_count() {
|
|||||||
int online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
|
int online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
pid_t pid = getpid();
|
pid_t pid = getpid();
|
||||||
psetid_t pset = PS_NONE;
|
psetid_t pset = PS_NONE;
|
||||||
// Are we running in a processor set?
|
// Are we running in a processor set or is there any processor set around?
|
||||||
if (pset_bind(PS_QUERY, P_PID, pid, &pset) == 0) {
|
if (pset_bind(PS_QUERY, P_PID, pid, &pset) == 0) {
|
||||||
if (pset != PS_NONE) {
|
|
||||||
uint_t pset_cpus;
|
uint_t pset_cpus;
|
||||||
// Query number of cpus in processor set
|
// Query the number of cpus available to us.
|
||||||
if (pset_info(pset, NULL, &pset_cpus, NULL) == 0) {
|
if (pset_info(pset, NULL, &pset_cpus, NULL) == 0) {
|
||||||
assert(pset_cpus > 0 && pset_cpus <= online_cpus, "sanity check");
|
assert(pset_cpus > 0 && pset_cpus <= online_cpus, "sanity check");
|
||||||
_processors_online = pset_cpus;
|
_processors_online = pset_cpus;
|
||||||
return pset_cpus;
|
return pset_cpus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Otherwise return number of online cpus
|
// Otherwise return number of online cpus
|
||||||
return online_cpus;
|
return online_cpus;
|
||||||
}
|
}
|
||||||
|
@ -37,5 +37,6 @@
|
|||||||
// platforms, but they may have different default values on other platforms.
|
// platforms, but they may have different default values on other platforms.
|
||||||
//
|
//
|
||||||
define_pd_global(bool, UseLargePages, false);
|
define_pd_global(bool, UseLargePages, false);
|
||||||
|
define_pd_global(bool, UseLargePagesIndividualAllocation, true);
|
||||||
define_pd_global(bool, UseOSErrorReporting, false); // for now.
|
define_pd_global(bool, UseOSErrorReporting, false); // for now.
|
||||||
define_pd_global(bool, UseThreadPriorities, true) ;
|
define_pd_global(bool, UseThreadPriorities, true) ;
|
||||||
|
@ -2593,10 +2593,105 @@ bool os::can_execute_large_page_memory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char* os::reserve_memory_special(size_t bytes) {
|
char* os::reserve_memory_special(size_t bytes) {
|
||||||
|
|
||||||
|
if (UseLargePagesIndividualAllocation) {
|
||||||
|
if (TracePageSizes && Verbose) {
|
||||||
|
tty->print_cr("Reserving large pages individually.");
|
||||||
|
}
|
||||||
|
char * p_buf;
|
||||||
|
// first reserve enough address space in advance since we want to be
|
||||||
|
// able to break a single contiguous virtual address range into multiple
|
||||||
|
// large page commits but WS2003 does not allow reserving large page space
|
||||||
|
// so we just use 4K pages for reserve, this gives us a legal contiguous
|
||||||
|
// address space. then we will deallocate that reservation, and re alloc
|
||||||
|
// using large pages
|
||||||
|
const size_t size_of_reserve = bytes + _large_page_size;
|
||||||
|
if (bytes > size_of_reserve) {
|
||||||
|
// Overflowed.
|
||||||
|
warning("Individually allocated large pages failed, "
|
||||||
|
"use -XX:-UseLargePagesIndividualAllocation to turn off");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
p_buf = (char *) VirtualAlloc(NULL,
|
||||||
|
size_of_reserve, // size of Reserve
|
||||||
|
MEM_RESERVE,
|
||||||
|
PAGE_EXECUTE_READWRITE);
|
||||||
|
// If reservation failed, return NULL
|
||||||
|
if (p_buf == NULL) return NULL;
|
||||||
|
|
||||||
|
release_memory(p_buf, bytes + _large_page_size);
|
||||||
|
// round up to page boundary. If the size_of_reserve did not
|
||||||
|
// overflow and the reservation did not fail, this align up
|
||||||
|
// should not overflow.
|
||||||
|
p_buf = (char *) align_size_up((size_t)p_buf, _large_page_size);
|
||||||
|
|
||||||
|
// now go through and allocate one page at a time until all bytes are
|
||||||
|
// allocated
|
||||||
|
size_t bytes_remaining = align_size_up(bytes, _large_page_size);
|
||||||
|
// An overflow of align_size_up() would have been caught above
|
||||||
|
// in the calculation of size_of_reserve.
|
||||||
|
char * next_alloc_addr = p_buf;
|
||||||
|
|
||||||
|
#ifdef ASSERT
|
||||||
|
// Variable for the failure injection
|
||||||
|
long ran_num = os::random();
|
||||||
|
size_t fail_after = ran_num % bytes;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (bytes_remaining) {
|
||||||
|
size_t bytes_to_rq = MIN2(bytes_remaining, _large_page_size);
|
||||||
|
// Note allocate and commit
|
||||||
|
char * p_new;
|
||||||
|
|
||||||
|
#ifdef ASSERT
|
||||||
|
bool inject_error = LargePagesIndividualAllocationInjectError &&
|
||||||
|
(bytes_remaining <= fail_after);
|
||||||
|
#else
|
||||||
|
const bool inject_error = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (inject_error) {
|
||||||
|
p_new = NULL;
|
||||||
|
} else {
|
||||||
|
p_new = (char *) VirtualAlloc(next_alloc_addr,
|
||||||
|
bytes_to_rq,
|
||||||
|
MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES,
|
||||||
|
PAGE_EXECUTE_READWRITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_new == NULL) {
|
||||||
|
// Free any allocated pages
|
||||||
|
if (next_alloc_addr > p_buf) {
|
||||||
|
// Some memory was committed so release it.
|
||||||
|
size_t bytes_to_release = bytes - bytes_remaining;
|
||||||
|
release_memory(p_buf, bytes_to_release);
|
||||||
|
}
|
||||||
|
#ifdef ASSERT
|
||||||
|
if (UseLargePagesIndividualAllocation &&
|
||||||
|
LargePagesIndividualAllocationInjectError) {
|
||||||
|
if (TracePageSizes && Verbose) {
|
||||||
|
tty->print_cr("Reserving large pages individually failed.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
bytes_remaining -= bytes_to_rq;
|
||||||
|
next_alloc_addr += bytes_to_rq;
|
||||||
|
}
|
||||||
|
|
||||||
|
return p_buf;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// normal policy just allocate it all at once
|
||||||
DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
|
DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
|
||||||
char * res = (char *)VirtualAlloc(NULL, bytes, flag, PAGE_EXECUTE_READWRITE);
|
char * res = (char *)VirtualAlloc(NULL,
|
||||||
|
bytes,
|
||||||
|
flag,
|
||||||
|
PAGE_EXECUTE_READWRITE);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool os::release_memory_special(char* base, size_t bytes) {
|
bool os::release_memory_special(char* base, size_t bytes) {
|
||||||
return release_memory(base, bytes);
|
return release_memory(base, bytes);
|
||||||
@ -2983,6 +3078,7 @@ size_t os::win32::_default_stack_size = 0;
|
|||||||
volatile intx os::win32::_os_thread_count = 0;
|
volatile intx os::win32::_os_thread_count = 0;
|
||||||
|
|
||||||
bool os::win32::_is_nt = false;
|
bool os::win32::_is_nt = false;
|
||||||
|
bool os::win32::_is_windows_2003 = false;
|
||||||
|
|
||||||
|
|
||||||
void os::win32::initialize_system_info() {
|
void os::win32::initialize_system_info() {
|
||||||
@ -3005,7 +3101,15 @@ void os::win32::initialize_system_info() {
|
|||||||
GetVersionEx(&oi);
|
GetVersionEx(&oi);
|
||||||
switch(oi.dwPlatformId) {
|
switch(oi.dwPlatformId) {
|
||||||
case VER_PLATFORM_WIN32_WINDOWS: _is_nt = false; break;
|
case VER_PLATFORM_WIN32_WINDOWS: _is_nt = false; break;
|
||||||
case VER_PLATFORM_WIN32_NT: _is_nt = true; break;
|
case VER_PLATFORM_WIN32_NT:
|
||||||
|
_is_nt = true;
|
||||||
|
{
|
||||||
|
int os_vers = oi.dwMajorVersion * 1000 + oi.dwMinorVersion;
|
||||||
|
if (os_vers == 5002) {
|
||||||
|
_is_windows_2003 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default: fatal("Unknown platform");
|
default: fatal("Unknown platform");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3103,6 +3207,10 @@ void os::init(void) {
|
|||||||
NoYieldsInMicrolock = true;
|
NoYieldsInMicrolock = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// This may be overridden later when argument processing is done.
|
||||||
|
FLAG_SET_ERGO(bool, UseLargePagesIndividualAllocation,
|
||||||
|
os::win32::is_windows_2003());
|
||||||
|
|
||||||
// Initialize main_process and main_thread
|
// Initialize main_process and main_thread
|
||||||
main_process = GetCurrentProcess(); // Remember main_process is a pseudo handle
|
main_process = GetCurrentProcess(); // Remember main_process is a pseudo handle
|
||||||
if (!DuplicateHandle(main_process, GetCurrentThread(), main_process,
|
if (!DuplicateHandle(main_process, GetCurrentThread(), main_process,
|
||||||
|
@ -34,6 +34,7 @@ class win32 {
|
|||||||
static julong _physical_memory;
|
static julong _physical_memory;
|
||||||
static size_t _default_stack_size;
|
static size_t _default_stack_size;
|
||||||
static bool _is_nt;
|
static bool _is_nt;
|
||||||
|
static bool _is_windows_2003;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Windows-specific interface:
|
// Windows-specific interface:
|
||||||
@ -60,6 +61,9 @@ class win32 {
|
|||||||
// Tells whether the platform is NT or Windown95
|
// Tells whether the platform is NT or Windown95
|
||||||
static bool is_nt() { return _is_nt; }
|
static bool is_nt() { return _is_nt; }
|
||||||
|
|
||||||
|
// Tells whether the platform is Windows 2003
|
||||||
|
static bool is_windows_2003() { return _is_windows_2003; }
|
||||||
|
|
||||||
// Returns the byte size of a virtual memory page
|
// Returns the byte size of a virtual memory page
|
||||||
static int vm_page_size() { return _vm_page_size; }
|
static int vm_page_size() { return _vm_page_size; }
|
||||||
|
|
||||||
|
@ -1398,7 +1398,7 @@ jint G1CollectedHeap::initialize() {
|
|||||||
_g1_storage.initialize(g1_rs, 0);
|
_g1_storage.initialize(g1_rs, 0);
|
||||||
_g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0);
|
_g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0);
|
||||||
_g1_max_committed = _g1_committed;
|
_g1_max_committed = _g1_committed;
|
||||||
_hrs = new HeapRegionSeq();
|
_hrs = new HeapRegionSeq(_expansion_regions);
|
||||||
guarantee(_hrs != NULL, "Couldn't allocate HeapRegionSeq");
|
guarantee(_hrs != NULL, "Couldn't allocate HeapRegionSeq");
|
||||||
guarantee(_cur_alloc_region == NULL, "from constructor");
|
guarantee(_cur_alloc_region == NULL, "from constructor");
|
||||||
|
|
||||||
@ -1789,6 +1789,20 @@ G1CollectedHeap::heap_region_par_iterate_chunked(HeapRegionClosure* cl,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ResetClaimValuesClosure: public HeapRegionClosure {
|
||||||
|
public:
|
||||||
|
bool doHeapRegion(HeapRegion* r) {
|
||||||
|
r->set_claim_value(HeapRegion::InitialClaimValue);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
G1CollectedHeap::reset_heap_region_claim_values() {
|
||||||
|
ResetClaimValuesClosure blk;
|
||||||
|
heap_region_iterate(&blk);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
// This checks whether all regions in the heap have the correct claim
|
// This checks whether all regions in the heap have the correct claim
|
||||||
// value. I also piggy-backed on this a check to ensure that the
|
// value. I also piggy-backed on this a check to ensure that the
|
||||||
@ -2031,10 +2045,12 @@ public:
|
|||||||
class VerifyRegionClosure: public HeapRegionClosure {
|
class VerifyRegionClosure: public HeapRegionClosure {
|
||||||
public:
|
public:
|
||||||
bool _allow_dirty;
|
bool _allow_dirty;
|
||||||
VerifyRegionClosure(bool allow_dirty)
|
bool _par;
|
||||||
: _allow_dirty(allow_dirty) {}
|
VerifyRegionClosure(bool allow_dirty, bool par = false)
|
||||||
|
: _allow_dirty(allow_dirty), _par(par) {}
|
||||||
bool doHeapRegion(HeapRegion* r) {
|
bool doHeapRegion(HeapRegion* r) {
|
||||||
guarantee(r->claim_value() == 0, "Should be unclaimed at verify points.");
|
guarantee(_par || r->claim_value() == HeapRegion::InitialClaimValue,
|
||||||
|
"Should be unclaimed at verify points.");
|
||||||
if (r->isHumongous()) {
|
if (r->isHumongous()) {
|
||||||
if (r->startsHumongous()) {
|
if (r->startsHumongous()) {
|
||||||
// Verify the single H object.
|
// Verify the single H object.
|
||||||
@ -2082,6 +2098,25 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This is the task used for parallel heap verification.
|
||||||
|
|
||||||
|
class G1ParVerifyTask: public AbstractGangTask {
|
||||||
|
private:
|
||||||
|
G1CollectedHeap* _g1h;
|
||||||
|
bool _allow_dirty;
|
||||||
|
|
||||||
|
public:
|
||||||
|
G1ParVerifyTask(G1CollectedHeap* g1h, bool allow_dirty) :
|
||||||
|
AbstractGangTask("Parallel verify task"),
|
||||||
|
_g1h(g1h), _allow_dirty(allow_dirty) { }
|
||||||
|
|
||||||
|
void work(int worker_i) {
|
||||||
|
VerifyRegionClosure blk(_allow_dirty, true);
|
||||||
|
_g1h->heap_region_par_iterate_chunked(&blk, worker_i,
|
||||||
|
HeapRegion::ParVerifyClaimValue);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void G1CollectedHeap::verify(bool allow_dirty, bool silent) {
|
void G1CollectedHeap::verify(bool allow_dirty, bool silent) {
|
||||||
if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) {
|
if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) {
|
||||||
if (!silent) { gclog_or_tty->print("roots "); }
|
if (!silent) { gclog_or_tty->print("roots "); }
|
||||||
@ -2092,8 +2127,27 @@ void G1CollectedHeap::verify(bool allow_dirty, bool silent) {
|
|||||||
&rootsCl);
|
&rootsCl);
|
||||||
rem_set()->invalidate(perm_gen()->used_region(), false);
|
rem_set()->invalidate(perm_gen()->used_region(), false);
|
||||||
if (!silent) { gclog_or_tty->print("heapRegions "); }
|
if (!silent) { gclog_or_tty->print("heapRegions "); }
|
||||||
|
if (GCParallelVerificationEnabled && ParallelGCThreads > 1) {
|
||||||
|
assert(check_heap_region_claim_values(HeapRegion::InitialClaimValue),
|
||||||
|
"sanity check");
|
||||||
|
|
||||||
|
G1ParVerifyTask task(this, allow_dirty);
|
||||||
|
int n_workers = workers()->total_workers();
|
||||||
|
set_par_threads(n_workers);
|
||||||
|
workers()->run_task(&task);
|
||||||
|
set_par_threads(0);
|
||||||
|
|
||||||
|
assert(check_heap_region_claim_values(HeapRegion::ParVerifyClaimValue),
|
||||||
|
"sanity check");
|
||||||
|
|
||||||
|
reset_heap_region_claim_values();
|
||||||
|
|
||||||
|
assert(check_heap_region_claim_values(HeapRegion::InitialClaimValue),
|
||||||
|
"sanity check");
|
||||||
|
} else {
|
||||||
VerifyRegionClosure blk(allow_dirty);
|
VerifyRegionClosure blk(allow_dirty);
|
||||||
_hrs->iterate(&blk);
|
_hrs->iterate(&blk);
|
||||||
|
}
|
||||||
if (!silent) gclog_or_tty->print("remset ");
|
if (!silent) gclog_or_tty->print("remset ");
|
||||||
rem_set()->verify();
|
rem_set()->verify();
|
||||||
guarantee(!rootsCl.failures(), "should not have had failures");
|
guarantee(!rootsCl.failures(), "should not have had failures");
|
||||||
|
@ -890,6 +890,9 @@ public:
|
|||||||
int worker,
|
int worker,
|
||||||
jint claim_value);
|
jint claim_value);
|
||||||
|
|
||||||
|
// It resets all the region claim values to the default.
|
||||||
|
void reset_heap_region_claim_values();
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
bool check_heap_region_claim_values(jint claim_value);
|
bool check_heap_region_claim_values(jint claim_value);
|
||||||
#endif // ASSERT
|
#endif // ASSERT
|
||||||
|
@ -317,7 +317,8 @@ class HeapRegion: public G1OffsetTableContigSpace {
|
|||||||
InitialClaimValue = 0,
|
InitialClaimValue = 0,
|
||||||
FinalCountClaimValue = 1,
|
FinalCountClaimValue = 1,
|
||||||
NoteEndClaimValue = 2,
|
NoteEndClaimValue = 2,
|
||||||
ScrubRemSetClaimValue = 3
|
ScrubRemSetClaimValue = 3,
|
||||||
|
ParVerifyClaimValue = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
// Concurrent refinement requires contiguous heap regions (in which TLABs
|
// Concurrent refinement requires contiguous heap regions (in which TLABs
|
||||||
|
@ -37,7 +37,7 @@ static int orderRegions(HeapRegion** hr1p, HeapRegion** hr2p) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapRegionSeq::HeapRegionSeq() :
|
HeapRegionSeq::HeapRegionSeq(const size_t max_size) :
|
||||||
_alloc_search_start(0),
|
_alloc_search_start(0),
|
||||||
// The line below is the worst bit of C++ hackery I've ever written
|
// The line below is the worst bit of C++ hackery I've ever written
|
||||||
// (Detlefs, 11/23). You should think of it as equivalent to
|
// (Detlefs, 11/23). You should think of it as equivalent to
|
||||||
@ -50,7 +50,7 @@ HeapRegionSeq::HeapRegionSeq() :
|
|||||||
_regions((ResourceObj::operator new (sizeof(GrowableArray<HeapRegion*>),
|
_regions((ResourceObj::operator new (sizeof(GrowableArray<HeapRegion*>),
|
||||||
(void*)&_regions,
|
(void*)&_regions,
|
||||||
ResourceObj::C_HEAP),
|
ResourceObj::C_HEAP),
|
||||||
100),
|
(int)max_size),
|
||||||
true),
|
true),
|
||||||
_next_rr_candidate(0),
|
_next_rr_candidate(0),
|
||||||
_seq_bottom(NULL)
|
_seq_bottom(NULL)
|
||||||
@ -167,6 +167,7 @@ int HeapRegionSeq::find(HeapRegion* hr) {
|
|||||||
// Public methods.
|
// Public methods.
|
||||||
|
|
||||||
void HeapRegionSeq::insert(HeapRegion* hr) {
|
void HeapRegionSeq::insert(HeapRegion* hr) {
|
||||||
|
assert(!_regions.is_full(), "Too many elements in HeapRegionSeq");
|
||||||
if (_regions.length() == 0
|
if (_regions.length() == 0
|
||||||
|| _regions.top()->end() <= hr->bottom()) {
|
|| _regions.top()->end() <= hr->bottom()) {
|
||||||
hr->set_hrs_index(_regions.length());
|
hr->set_hrs_index(_regions.length());
|
||||||
|
@ -49,7 +49,7 @@ class HeapRegionSeq: public CHeapObj {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Initializes "this" to the empty sequence of regions.
|
// Initializes "this" to the empty sequence of regions.
|
||||||
HeapRegionSeq();
|
HeapRegionSeq(const size_t max_size);
|
||||||
|
|
||||||
// Adds "hr" to "this" sequence. Requires "hr" not to overlap with
|
// Adds "hr" to "this" sequence. Requires "hr" not to overlap with
|
||||||
// any region already in "this". (Will perform better if regions are
|
// any region already in "this". (Will perform better if regions are
|
||||||
|
@ -391,6 +391,8 @@ size_t MutableNUMASpace::default_chunk_size() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Produce a new chunk size. page_size() aligned.
|
// Produce a new chunk size. page_size() aligned.
|
||||||
|
// This function is expected to be called on sequence of i's from 0 to
|
||||||
|
// lgrp_spaces()->length().
|
||||||
size_t MutableNUMASpace::adaptive_chunk_size(int i, size_t limit) {
|
size_t MutableNUMASpace::adaptive_chunk_size(int i, size_t limit) {
|
||||||
size_t pages_available = base_space_size();
|
size_t pages_available = base_space_size();
|
||||||
for (int j = 0; j < i; j++) {
|
for (int j = 0; j < i; j++) {
|
||||||
@ -405,7 +407,7 @@ size_t MutableNUMASpace::adaptive_chunk_size(int i, size_t limit) {
|
|||||||
size_t chunk_size = 0;
|
size_t chunk_size = 0;
|
||||||
if (alloc_rate > 0) {
|
if (alloc_rate > 0) {
|
||||||
LGRPSpace *ls = lgrp_spaces()->at(i);
|
LGRPSpace *ls = lgrp_spaces()->at(i);
|
||||||
chunk_size = (size_t)(ls->alloc_rate()->average() * pages_available / alloc_rate) * page_size();
|
chunk_size = (size_t)(ls->alloc_rate()->average() / alloc_rate * pages_available) * page_size();
|
||||||
}
|
}
|
||||||
chunk_size = MAX2(chunk_size, page_size());
|
chunk_size = MAX2(chunk_size, page_size());
|
||||||
|
|
||||||
|
@ -628,6 +628,32 @@ JVM_ENTRY(void, JVM_ResolveClass(JNIEnv* env, jclass cls))
|
|||||||
if (PrintJVMWarnings) warning("JVM_ResolveClass not implemented");
|
if (PrintJVMWarnings) warning("JVM_ResolveClass not implemented");
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
// Common implementation for JVM_FindClassFromBootLoader and
|
||||||
|
// JVM_FindClassFromLoader
|
||||||
|
static jclass jvm_find_class_from_class_loader(JNIEnv* env, const char* name,
|
||||||
|
jboolean init, jobject loader,
|
||||||
|
jboolean throwError, TRAPS) {
|
||||||
|
// Java libraries should ensure that name is never null...
|
||||||
|
if (name == NULL || (int)strlen(name) > symbolOopDesc::max_length()) {
|
||||||
|
// It's impossible to create this class; the name cannot fit
|
||||||
|
// into the constant pool.
|
||||||
|
if (throwError) {
|
||||||
|
THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), name);
|
||||||
|
} else {
|
||||||
|
THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
symbolHandle h_name = oopFactory::new_symbol_handle(name, CHECK_NULL);
|
||||||
|
Handle h_loader(THREAD, JNIHandles::resolve(loader));
|
||||||
|
jclass result = find_class_from_class_loader(env, h_name, init, h_loader,
|
||||||
|
Handle(), throwError, THREAD);
|
||||||
|
|
||||||
|
if (TraceClassResolution && result != NULL) {
|
||||||
|
trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result)));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// Rationale behind JVM_FindClassFromBootLoader
|
// Rationale behind JVM_FindClassFromBootLoader
|
||||||
// a> JVM_FindClassFromClassLoader was never exported in the export tables.
|
// a> JVM_FindClassFromClassLoader was never exported in the export tables.
|
||||||
// b> because of (a) java.dll has a direct dependecy on the unexported
|
// b> because of (a) java.dll has a direct dependecy on the unexported
|
||||||
@ -649,8 +675,8 @@ JVM_ENTRY(jclass, JVM_FindClassFromBootLoader(JNIEnv* env,
|
|||||||
jboolean throwError))
|
jboolean throwError))
|
||||||
JVMWrapper3("JVM_FindClassFromBootLoader %s throw %s", name,
|
JVMWrapper3("JVM_FindClassFromBootLoader %s throw %s", name,
|
||||||
throwError ? "error" : "exception");
|
throwError ? "error" : "exception");
|
||||||
return JVM_FindClassFromClassLoader(env, name, JNI_FALSE,
|
return jvm_find_class_from_class_loader(env, name, JNI_FALSE,
|
||||||
(jobject)NULL, throwError);
|
(jobject)NULL, throwError, THREAD);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
|
JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
|
||||||
@ -658,26 +684,8 @@ JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
|
|||||||
jboolean throwError))
|
jboolean throwError))
|
||||||
JVMWrapper3("JVM_FindClassFromClassLoader %s throw %s", name,
|
JVMWrapper3("JVM_FindClassFromClassLoader %s throw %s", name,
|
||||||
throwError ? "error" : "exception");
|
throwError ? "error" : "exception");
|
||||||
// Java libraries should ensure that name is never null...
|
return jvm_find_class_from_class_loader(env, name, init, loader,
|
||||||
if (name == NULL || (int)strlen(name) > symbolOopDesc::max_length()) {
|
throwError, THREAD);
|
||||||
// It's impossible to create this class; the name cannot fit
|
|
||||||
// into the constant pool.
|
|
||||||
if (throwError) {
|
|
||||||
THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), name);
|
|
||||||
} else {
|
|
||||||
THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
symbolHandle h_name = oopFactory::new_symbol_handle(name, CHECK_NULL);
|
|
||||||
Handle h_loader(THREAD, JNIHandles::resolve(loader));
|
|
||||||
jclass result = find_class_from_class_loader(env, h_name, init, h_loader,
|
|
||||||
Handle(), throwError, thread);
|
|
||||||
|
|
||||||
if (TraceClassResolution && result != NULL) {
|
|
||||||
trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -330,6 +330,12 @@ class CommandLineFlags {
|
|||||||
product_pd(bool, UseLargePages, \
|
product_pd(bool, UseLargePages, \
|
||||||
"Use large page memory") \
|
"Use large page memory") \
|
||||||
\
|
\
|
||||||
|
product_pd(bool, UseLargePagesIndividualAllocation, \
|
||||||
|
"Allocate large pages individually for better affinity") \
|
||||||
|
\
|
||||||
|
develop(bool, LargePagesIndividualAllocationInjectError, false, \
|
||||||
|
"Fail large pages individual allocation") \
|
||||||
|
\
|
||||||
develop(bool, TracePageSizes, false, \
|
develop(bool, TracePageSizes, false, \
|
||||||
"Trace page size selection and usage.") \
|
"Trace page size selection and usage.") \
|
||||||
\
|
\
|
||||||
@ -1819,6 +1825,9 @@ class CommandLineFlags {
|
|||||||
diagnostic(bool, VerifyDuringGC, false, \
|
diagnostic(bool, VerifyDuringGC, false, \
|
||||||
"Verify memory system during GC (between phases)") \
|
"Verify memory system during GC (between phases)") \
|
||||||
\
|
\
|
||||||
|
diagnostic(bool, GCParallelVerificationEnabled, true, \
|
||||||
|
"Enable parallel memory system verification") \
|
||||||
|
\
|
||||||
diagnostic(bool, VerifyRememberedSets, false, \
|
diagnostic(bool, VerifyRememberedSets, false, \
|
||||||
"Verify GC remembered sets") \
|
"Verify GC remembered sets") \
|
||||||
\
|
\
|
||||||
|
@ -2985,10 +2985,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
|||||||
if (UseStringCache) {
|
if (UseStringCache) {
|
||||||
// Forcibly initialize java/lang/String and mutate the private
|
// Forcibly initialize java/lang/String and mutate the private
|
||||||
// static final "stringCacheEnabled" field before we start creating instances
|
// static final "stringCacheEnabled" field before we start creating instances
|
||||||
#ifdef ASSERT
|
|
||||||
klassOop tmp_k = SystemDictionary::find(vmSymbolHandles::java_lang_String(), Handle(), Handle(), CHECK_0);
|
|
||||||
assert(tmp_k == NULL, "java/lang/String should not be loaded yet");
|
|
||||||
#endif
|
|
||||||
klassOop k_o = SystemDictionary::resolve_or_null(vmSymbolHandles::java_lang_String(), Handle(), Handle(), CHECK_0);
|
klassOop k_o = SystemDictionary::resolve_or_null(vmSymbolHandles::java_lang_String(), Handle(), Handle(), CHECK_0);
|
||||||
KlassHandle k = KlassHandle(THREAD, k_o);
|
KlassHandle k = KlassHandle(THREAD, k_o);
|
||||||
guarantee(k.not_null(), "Must find java/lang/String");
|
guarantee(k.not_null(), "Must find java/lang/String");
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
* have any questions.
|
* have any questions.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
* have any questions.
|
* have any questions.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
* have any questions.
|
* have any questions.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user