走自己的路

          路漫漫其修遠(yuǎn)兮,吾將上下而求索

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            50 隨筆 :: 4 文章 :: 118 評(píng)論 :: 0 Trackbacks
           
          1. 作為static變量,static屬性是不會(huì)被序列化的,但是log object被定義成static,如果該類是shared library,常常會(huì)出現(xiàn)問題。因?yàn)?/span>shared libraryclassloader可能是每個(gè)application classloader的祖輩,所以這些類只會(huì)被load一次,也就是說(shuō)所有application就會(huì)共享這個(gè)log object,所有的log信息都會(huì)輸出到相同的地方.
          public class Foo {
            
          private final static Log log = LogFactory.getLog(Foo.class);
            .etc
          }

           

          1. 作為類的實(shí)例變量:log對(duì)象一般情況下是不需要序列化的,所以我們需要用transient來(lái)聲明。

          方法1

              
            private transient Log log;
            
          private Log getLog() {
              
          if (log == null)
                log
          =LogFactory.getLog(Some.class);
              
          return log;
            }

            getLog().debug(
          "foo");

           

          方法2

          private transient Log log = LogFactory.getLog(Some.class);
            
          private Object readResolve() {
               log 
          = LogFactory.getLog(Some.class);
               
          return this;
            }

           

          這個(gè)比起靜態(tài)變量,每個(gè)實(shí)例都需要?jiǎng)?chuàng)建一個(gè)引用,都要分配4或者8個(gè)字節(jié)的空間,需要消耗更多的cpu和內(nèi)存,但是保險(xiǎn)。




          posted on 2008-07-04 11:38 叱咤紅人 閱讀(1250) 評(píng)論(2)  編輯  收藏 所屬分類: J2SE and JVM Other Java and J2EE frameworks

          評(píng)論

          # re: 在可序列化的類中使用log對(duì)象 2008-07-04 17:06 Jack.Wang
          以前在做 web 時(shí)就有過 shared library 的問題----類轉(zhuǎn)型沖突(明明是這個(gè)類的對(duì)象怎么沖突呢?原因就是不同的 classloader 加載的class,對(duì)象屬于不同的 class),最后是把 lib 放到 share lib 下,這樣每個(gè)子 classloader 就可以共用 class.  回復(fù)  更多評(píng)論
            

          # re: 在可序列化的類中使用log對(duì)象 2008-07-06 10:52 sqh
          好文章!頂!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 昭平县| 朝阳县| 乃东县| 固安县| 绿春县| 安徽省| 三台县| 琼结县| 岐山县| 古交市| 广丰县| 桦川县| 湖北省| 阜平县| 东丽区| 洛隆县| 宣汉县| 双辽市| 凉山| 罗山县| 龙泉市| 大方县| 抚远县| 若尔盖县| 新邵县| 平陆县| 平阴县| 图木舒克市| 沙湾县| 枞阳县| 盐亭县| 新绛县| 九江县| 鹿邑县| 株洲县| 宣威市| 陆川县| 名山县| 德保县| 湖南省| 南汇区|