TO:lydong(西瓜水) 
  很感谢您是第一个回答此问题的人!
 我确实是只加载了一次,而且是在应用服务器系统启动的时候加载的,别的地方都没有再加载配置文件,但是在程序中别的地方有很多地方需要读取该配置文件,就会很经常的调用
loadSecurityProp.getSecurityConfig(key)这个方法,但不知这样做效率上如何?请指点!

解决方案 »

  1.   

    如果程序中多次调用这个Properties,你把它写成公共静态变量,就可以了嘛。
      

  2.   

    TO:terry_yip(搞了几年开发,现在才来恶补基础,请别见笑!)   我确实是定义成公共静态变量的,
       public static Properties securityConfigProp;  //安全配置文件  但具体不太清楚,这个究竟是什么原理,应用服务器是把整把整个文件读入内存了吗?
    我调用这个loadSecurityProp.getSecurityConfig(key)的时候它是从内存中读取VALUE值还是从文件中读取,如果是从文件中读取,那岂不是很慢,如果是从内存中读取,那么这样一直在内存中,会不会很耗内存???
      

  3.   

    是放在你的内存中的securityConfigProp变量里了,一直就占那么大的内存,不会再耗别的内存了
      

  4.   

    你既不想每次都从文件中读取,又不想这个文件的内容常驻内存,那么,你就是想一个方案“既只读一次文件,又不用在内存当中”,我假设你的想法是可行的,但是有个问题,那么第二次读的时候,程序既不可以从硬盘上读,又不能从内存中读”,那么从哪读呢?光盘上还是网络上还是还有别的得到文件内容的方法?  我觉得楼主对效率的执着有点过头了,就像windows这么大,其实他的很多多类库,也是常驻内存的,因为日常很多操作都要用这些类库,你启动一个windows xp,起码占用150M以上的内存,如果说这会很费内存,也是没办法的事。
      

  5.   

    TO:楼上几位,
       
       谢谢楼上几位的回答,我现在基本明白,是应用服务器系统启动的时候,以类似于Hashmap 或HashTable的结构把属性文件的信息加载到内存中,然后用的时候再重新调取,不知我的理解对不对,请大家继续讨论??
      

  6.   

    ?  TO:楼上几位,谢谢楼上几位的回答,我现在基本明白,是应用服务器系统启动的时候,以类似于Hashmap 或HashTable的结构把属性文件的信息加载到内存中,然后用的时候再重新调取,不知我的理解对不对,请大家继续讨论??正确,
      

  7.   

    Properties继承自Hashtable,是一种Hashtable类型,其元素是系统属性。
    任何一个InputStream类型都能传递给Properties.load(InputStream)方法来加载一组从输入流读取的属性,你这里创建了一个属性相关的 FileInputStream作为输入。
    如果考虑性能就不要用Properties,建一个类存放静态常量不就可以了?
      

  8.   

    TO: ricelane() ,  如果建一个类写在静态常量里,就不叫配置文件了,也不方便修改了呀。