这是由于系统设置造成的差异还是由于代码差异造成的?
OpenJDK版本:
Welcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).
scala> new java.sql.Timestamp(1292141899648L)
res0: java.sql.Timestamp = 2010-12-12 08:18:19.648
Run Code Online (Sandbox Code Playgroud)
Sun Java版本:
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
scala> new java.sql.Timestamp(1292141899648L)
res0: java.sql.Timestamp = 2010-12-12 00:18:19.648
Run Code Online (Sandbox Code Playgroud) 我面临着排序文件的奇怪问题.
鉴于环境
Dev: Mac OS X 10.11.3 OracleJDK 1.8.0_45
PreProduction env: FreeBSD 10 OpenJDK 1.8.0_72
Run Code Online (Sandbox Code Playgroud)
码
public static String getLatestTag() {
File tagsDir = new File("./.git/refs/tags");
...
File[] tags = tagsDir.listFiles();
List<File> tagsList = Arrays.asList(tags);
Collections.sort(tagsList, (f1, f2) -> {
if(f1.lastModified() > f1.lastModified()) {
return 1;
} else if(f1.lastModified() == f2.lastModified()) {
return 0;
} else {
return -1;
}
});
logTagsList(tagsList);
String latestTag = tagsList.get(0).getName();
Logger.info("Application version is: %s", latestTag.replaceAll("[^\\d.]", ""));
return latestTag;
}
private static void logTagsList(List<File> tags) …
Run Code Online (Sandbox Code Playgroud) 从http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/87ee5ee27509/src/share/vm/classfile/vmSymbols.hpp,我可以看到内部方法声明如下:
do_intrinsic(_getByte, sun_misc_Unsafe, getByte_name, getByte_signature, F_RN) \
Run Code Online (Sandbox Code Playgroud)
但是如何找到该方法的实际实现(我认为是汇编代码)_getByte
?
我读取了在热点OpenJDK 7中抛出异常的代码,并跟踪使用它们的类.他们结束了在实现类JVM_ENTRY(result_type, header)
中,例如jvm.cpp
,java.cpp
等我的问题是什么东西的功能JVM_ENTRY
,它是如何工作的?
以下是示例 jvm.cpp
JVM_ENTRY(jobject, JVM_AllocateNewObject(JNIEnv *env, jobject receiver, jclass currClass, jclass initClass))
JVMWrapper("JVM_AllocateNewObject");
JvmtiVMObjectAllocEventCollector oam;
// Receiver is not used
oop curr_mirror = JNIHandles::resolve_non_null(currClass);
oop init_mirror = JNIHandles::resolve_non_null(initClass);
// Cannot instantiate primitive types
if (java_lang_Class::is_primitive(curr_mirror) || java_lang_Class::is_primitive(init_mirror)) {
ResourceMark rm(THREAD);
THROW_0(vmSymbols::java_lang_InvalidClassException());
}
// Arrays not allowed here, must use JVM_AllocateNewArray
if (Klass::cast(java_lang_Class::as_klassOop(curr_mirror))->oop_is_javaArray() ||
Klass::cast(java_lang_Class::as_klassOop(init_mirror))->oop_is_javaArray()) {
ResourceMark rm(THREAD);
THROW_0(vmSymbols::java_lang_InvalidClassException());
}
instanceKlassHandle curr_klass (THREAD, java_lang_Class::as_klassOop(curr_mirror));
instanceKlassHandle init_klass (THREAD, java_lang_Class::as_klassOop(init_mirror));
assert(curr_klass->is_subclass_of(init_klass()), "just checking"); …
Run Code Online (Sandbox Code Playgroud) 原始代码是:
public static int numberOfLeadingZeros(int i) {
// HD, Figure 5-6
if (i == 0)
return 32;
int n = 1;
if (i >>> 16 == 0) { n += 16; i <<= 16; }
if (i >>> 24 == 0) { n += 8; i <<= 8; }
if (i >>> 28 == 0) { n += 4; i <<= 4; }
if (i >>> 30 == 0) { n += 2; i <<= 2; }
n -= i …
Run Code Online (Sandbox Code Playgroud)