案例1:输出debug信息需要加enable判断
log.debug("userId:"+ user.getId())//--> if(log.isDebugEnable()){ log.debug("userId:"+ user.getId()) }
分析:1、不加enable判断,括号中的字符串相加会产生中间字符,大量调用时创建和销毁的数量非常庞大,会造成gc频繁执行,进而影响性能。2、线上日志一般不会是debug,因此执行字符串拼接是无意义的运算。根据log优先级,对error、warn可以不用判断
案例2:遍历map时,特别是数据量较大时不要使用get(key)取值
for(Iterator<String> ite = map.keySet().iterator(); ite.hasNext();){ String key = ite.next(); String value = map.get(key); } --> for(Iterator<Entry<String,String>> ite = map.entrySet().iterator(); ite.hasNext();){ Entry<String,String> entry = (Entry<String,String>) ite.next(); String key = entry.getKey(); String value = entry.getValue(); }
分析:Map类的get(key)方法会进行两次hashCode的运算,造成效率低
public V get(Object paramObject) { if (paramObject == null) return getForNullKey(); int i = hash(paramObject.hashCode()); for (Entry localEntry = this.table[indexFor(i, this.table.length)]; localEntry != null; localEntry = localEntry.next) { Object localObject; if ((localEntry.hash == i) && (((localObject = localEntry.key) == paramObject) || (paramObject.equals(localObject)))) return localEntry.value; } return null; }
案例3: Java5的正则表达式没有执行事实上perl标准,也有有若干缺陷,一是可能会导致JVM的崩溃,二是在递归处理上性能低下,使用时也需要预编译。
Pattern p = Pattern.compile("^[a-zA-Z]+[a-zA-Z0-9]+"); Matcher m = p.matcher("12aa"); if(m.matches()){...} -> private static final Pattern p = Pattern.compile("^[a-zA-Z0-9]+"); or private static final Pattern p = new Perl5Compiler().compile("^[a-zA-Z0-9]+$", '''Perl5Compiler.READ_ONLY_MASK'''); //由于Pattern本身不是线程安全的,只有加了READ_ONLY_MASK的编译参数才能用于共享使用,否则会出现并发访问的问题,导致错误结果 PatternMatcher matcher = new Perl5Matcher(); if(matcher.matches("123", p)){...}
分析:建议使用oro库处理RegExp,表达式一定要求是预先编译的,编译过程是非常消耗性能的。我们经常用的String.split()方法里的实现:Pattern.compile(paramString).split(this, paramInt),可以看出性能也是不高的,最好使用pattern.split(str)
. 匹配任意一个字符 $ 匹配一行的结尾 ^ 匹配一行的开头(在[]里面表示否定) {} 定义了一个范围 [] 定义了一个字符类 () 定义了一个组 *前面出现0次以上 + 前面匹配一次以上 ?前面出现0次或一次 \ 后面的字符不会看作metacharacter \w 字母数字下划线 \W 非字母数字下划线 \d 单个数字 \D单个非数字 | 或,二者之一 &&与操作符 \b单词边界
案例5:serialVersionUID 来解决软件兼容性的问题,即在版本升级时(对象新增或减少字段)反序列化仍保持对象的唯一性。有些情况不能更改 serialVersionUID ,比如分布式环境下,如果要修改,只能关联系统都暂停服务,发布完后再对外统一提供服务。有些情况必须修改serialVersionUID ,比如缓存中的数据,新增了字段,但缓存中的数据还是老的数据,不修改serialVersionUID ,反序列化回来会缺少新增的字段值,这时修改serialVersionUID 值则会在反序列化时报错,重新put新的缓存数据。
private static final long serialVersionUID = 7311398892155614476L;
相关推荐
2023年10月中国数据库行业分析报告-他山之石,融合发展-41页
20131112-海通证券-他山之石系列十四.pdf
6. **案例分析**:可能引用其他地区或国家的成功案例,探讨如何将这些经验应用于中国金融市场。 7. **市场展望**:对未来一段时间内的市场走势进行预测,为投资者提供前瞻性的指导。 【标签】 虽然没有提供具体的...
国际宏观评论-川财证券-他山之石·海外精译第273期:海外机构对美国现阶段通胀压力的分析.pdf
【华东五市旅游考察报告-他山之石可以攻玉】 本报告主要探讨了华东五市(杭州、无锡、苏州、上海、南京)在旅游业发展上的成功经验,并为江津市提供借鉴,以促进其旅游业的提升和发展。华东五市凭借丰富的旅游资源...
在发展的过程中,富誉天成始终面临两个问题难以通过自身努力得到解决。第一,很多好想法难以落实,富誉天成在视频媒体行业具有非常丰富的经验,了解最终客户需求,但是由于没有强有力的IT厂商支持,很多方案难以付诸...
### 东方证券-计算机行业:他山之石系列报告-二-:大模型应用开发框架LangChain梳理 #### 一、LangChain概述及其价值定位 **LangChain**是一款旨在简化和加速基于大语言模型(Large Language Models, LLMs)应用...
这份报告由川财证券发布,主题为美国科技股目前是否存在泡沫的问题,这是“他山之石.海外精译系列”中的第37期报告。报告中引用了Andreessen Horowitz的观点,并对科技股市场的现状进行了深入分析。以下是对该报告...
分析师Azad Zangana预计,德国的环境和能源政策将致力于推动向可持续发展转型,预计在这一转变中,绿色技术、可再生能源及相关领域将得到快速发展和应用。而Nicholette MacDonald-Brown和Arianna Fox则从行业角度...
他山之石——企业知识管理案例分析以实践认知世界,以实事构架世界,他山之石——企业知识管理案例分析总...该文档为他山之石——企业知识管理案例分析,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以...
20210623-东吴证券-环保工程及服务行业碳中和系列报告(十):鉴他山之石,全国碳市场展望及减碳成本测算.pdf
"企业知识管理案例分析" 企业知识管理是指企业对知识的收集、整理、共享和应用,旨在提高企业的竞争力和创新能力。本文将通过分析安达信和德州仪器公司两家企业的知识管理实践,探讨企业知识管理的重要性和实施策略...
这篇名为“家用轻工:深挖“公牛”系列报告四-以他山之石观玉,公牛LED业务竿头日上”的行业报告聚焦于公牛集团在LED业务上的发展与成就。公牛集团,作为中国知名的电器及配件制造商,以其卓越的产品质量和创新设计...
20210728-银河证券-电子行业他山之石系列:韩国电子产业发展启示录.pdf
“证券研究报告/行业深度报告他山之石——欧洲钢铁行业发展梳理报告摘要”这部分描述了文档的性质和内容的梗概,即该文档是东北证券出具的证券研究报告中的一个行业深度报告部分。通过分析欧洲钢铁行业的发展历程,...
汽车私人会所功能设计成功案例暨他山之石鉴赏终案.pptx