`
抛出异常的爱
  • 浏览: 620105 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

答复: 关于性能优化

阅读更多
今天看到一个贴子:
http://www.iteye.com/topic/952507

所以去翻了翻以前的回贴.整理一下
http://www.iteye.com/topic/812468

mercyblitz 写道
抛出异常的爱 写道
cectsky 写道
HuangSui.cn 写道
if(log.isDebug()){
   log.debug("xxxx"+bean+"xxxxx");
}


这样有什么问题?

多次一举

从架构师的角度的的确确不是多此一举


bean的toString方法可能会产生底归性的数据大查询,遍历所有的节点大于几百上千也常 常 见到

更有可能会产生对blob字段的数据日志输出

我说的是把这行代码 这样的代码 删了.
这种debug是没必要的存在.
这种没有作用的!
隐藏着可能会产生严重问题的代码!
(以至于必须用编程规范约束的代码)!
的出现就是对系统,自己,同事,客户的不负责任.


PS:楼上几个不是在开 我玩笑么?


看场景,大多数Bean是Thin 的,如果是Rich的话,可以换方法,或者修改toStrnig的约束。

再说debug的日志级别要开放,产品上一般不开放,对客户来说不那么重要。


抛出异常的爱 写道
ironsabre 写道
iaimstar 写道
我记得啥书来着

里面说 优化的第一原则

不要优化


这么说是因为低水平的选手太多了,怕大家乱搞。
真正的高手不受这个原则限制。

你确认看过第二句么?
要不要我把页码告诉你你再过去看看第二行写的是什么 ?


PS:很多toString方法是eclipse生成的,
还有toString是用Common lang toStringBuilder反射出来的.
集合包里的listtostring就是底归的....
没有外面的if(isDebug) 这些toString方法会被 + 号所触发.
在hibernate里轻轻松松破掉lazy load

当然这都是极端情况.
尽量不要写这种可能有问题而且无意义的代码才是我主要要说的....

如果需要至少要把这种代码包装起来.....
class MyLogZ{

 public static void DEBUG(Logger log , Object .... message){
    if(log.isDebug())return;
    StrinBuilder buffer = new StringBuilder();
    for(Object o message){
          buffer.appand(""+o);
    }
    log.debug(buffer.toString());
 }

}


战略不战略我不知道.
规则必有因.
去掉规则也有很多办法

分享到:
评论
5 楼 jiasky 2011-06-25  
这样的帖子很精彩,
4 楼 抛出异常的爱 2011-03-26  
如果运维没开sever mode那不是死了?
3 楼 抛出异常的爱 2011-03-26  
log.debug("xxxx"+bean+"xxxxx"); 
-----------------------------------
String log = "XXX"+bean+"cccc";
log.debug(log);

上下两段代码相等......
你可以试试在toString方法里加一个sleep 2000 看看关了debug他会不会不睡
2 楼 油炸大龙虾 2011-03-26  
如果不开启日志,并且把代码重构下FCUK = log.is_debug_enabled,
jvm在开启server_mode并解释足够时间以后,判定符合优化条件,
C1会这段代码整体替换掉。
所以我认为这里核心的问题,不是string优化。
1 楼 DOCDOC 2011-03-10  
非常有意义的细节问题

相关推荐

Global site tag (gtag.js) - Google Analytics