一行代码,我优化掉了1G内存占用
阿里妹导读
背景
正文
public class StringPoolDeserializer implements ObjectDeserializer {
"unchecked") (
public <T> T deserialze(DefaultJSONParser parser, Type type, Object o) {
if (!type.equals(String.class)) {
throw new JSONException("StringPoolDeserializer can only deserialize String");
}
return (T) ((String) parser.parse(o)).intern();
}
public int getFastMatchToken() {
return 0;
}
}
public class StringPoolMap extends HashMap<String, String> {
public String put(String key, String value) {
if (key != null) {
key = key.intern();
}
if (value != null) {
value = value.intern();
}
return super.put(key, value);
}
}
写在最后
多写一点,String.intern()的实现
‒尝试把this放进一个池子里,如果里面内容相等的东西已经存在了,则返回那个已经存在的地址。
JNIEXPORT jobject JNICALL
Java_java_lang_String_intern(JNIEnv *env, jobject this)
{
return JVM_InternString(env, this);
}
JNIEXPORT jobject JNICALL
Java_java_lang_String_intern(JNIEnv *env, jobject this)
{
return JVM_InternString(env, this);
}
oop StringTable::intern(Handle string_or_null_h, const jchar* name, int len, TRAPS) {
unsigned int hash = java_lang_String::hash_code(name, len);
// 分别在shared table 和local table中查找有无存在的string
// 找到则快速返回
oop found_string = lookup_shared(name, len, hash);
if (found_string != nullptr) {
return found_string;
}
if (_alt_hash) {
hash = hash_string(name, len, true);
}
found_string = do_lookup(name, len, hash);
if (found_string != nullptr) {
return found_string;
}
// 没有找到的话,则创建并塞入
return do_intern(string_or_null_h, name, len, hash, THREAD);
}
网站静态资源访问加速
本方案使用阿里云CDN产品来分发OSS上的网站静态文件,不仅可以降低源站的负载压力,还能够提升网站的访问性能,同时还能在高并发场景下为您节约成本。快点击阅读原文查看详情。
微信扫码关注该文公众号作者
戳这里提交新闻线索和高质量文章给我们。
来源: qq
点击查看作者最近其他文章