Nin*_*ale 25 java string string-pool
有没有办法检查,目前字符串池中有哪些字符串.
我可以以编程方式列出池中存在的所有字符串吗?
要么
任何IDE都有这种插件吗?
izs*_*tas 18
您无法从Java代码访问字符串池,至少不能在Java VM的HotSpot实现中访问.
Java中的字符串池是使用字符串实习来实现的.根据JLS§3.10.5:
字符串文字总是指同一个类的实例
String.这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被"实现"以便使用该方法共享唯一实例String.intern.
根据JLS§15.28:
类型的编译时常量表达式
String总是"实例化",以便使用该方法共享唯一实例String.intern.
String.intern是一个本机方法,正如我们在OpenJDK中的声明中所看到的:
public native String intern();
Run Code Online (Sandbox Code Playgroud)
此方法的本机代码调用JVM_InternStringfunction.
JVM_ENTRY(jstring, JVM_InternString(JNIEnv *env, jstring str))
JVMWrapper("JVM_InternString");
JvmtiVMObjectAllocEventCollector oam;
if (str == NULL) return NULL;
oop string = JNIHandles::resolve_non_null(str);
oop result = StringTable::intern(string, CHECK_NULL);
return (jstring) JNIHandles::make_local(env, result);
JVM_END
Run Code Online (Sandbox Code Playgroud)
也就是说,使用本机代码实现字符串实习,并且没有Java API直接访问字符串池.但是,您可以为此目的自行编写本机方法.
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |