[jvm]深入JVM(一):从

时间:2013-02-09 09:28:12
【文件属性】:

文件名称:[jvm]深入JVM(一):从

文件大小:4KB

文件格式:ZIP

更新时间:2013-02-09 09:28:12

[jvm]深入JVM(一):从

[jvm]深入JVM(一):从"abc"=="abc"看java的连接过程收藏 一般说来,我不关注java底层的东西,这次是一个朋友问到了,注意不光是 System.out.println("abc"=="abc");返回true, System.out.println(("a"+"b"+"c").intern()=="abc");也返回true;这和java的连接过程有关。 java解析CONSTANT_String_info时,java虚拟机必须把一个字符串对象的引用,放到constant pool entry 中。每个java虚拟机维护着一张列表,里面有所有程序被"interned"的字符串对象的引用。 查看constPoolOop.cpp文件 oop constantPoolOopDesc::string_at_impl(constantPoolHandle this_oop, int which, TRAPS) { oop entry = *(this_oop->obj_at_addr(which)); if (entry->is_symbol()) { ObjectLocker ol(this_oop, THREAD); if (this_oop->tag_at(which).is_unresolved_string()) { // Intern string symbolOop sym = this_oop->unresolved_string_at(which); entry = StringTable::intern(sym, CHECK_(constantPoolOop(NULL))); this_oop->string_at_put(which, entry); } else { // Another thread beat us and interned string, read string from constant pool entry = this_oop->resolved_string_at(which); } } assert(java_lang_String::is_instance(entry), "must be string"); return entry; }


【文件预览】:
[jvm]深入JVM.doc

网友评论