第一次profiling

    原来以为是程序中某个地方内存对象一直占用而没有得到及时的释放,我用JProfiler tunning了半天,一直没找到具体的原因,后来查看操作人员的日志,,发生堆空间溢出的地方不同,在代码中有多处存在,但后来经过分析,这些地方的共同点是在new一个对象(包括对象数组)时,发生了堆内存溢出,这个问题对我来说不是难事,肯定是程序中产生了大量的对象导致,关键就是确定在什么地方导致了大量对象产生,可以寻找一个代码切入点(凭经验和对代码的熟悉程度),在发生异常的地方,设置断点,并且在在debug时可以回看back trace,看哪些对象中存在巨大的对象,凭此就可以快速的找到原因。
     经过断点分析,终于找到了原因,原来是原来的程序员在所有属性函数的地方都生成了新对象,而这个属性函数是被频繁调用的,但是,这种属性查询函数实际上没必要每次产生新对象,因为对象所完成的功能是一样的,因此,我将其改为单例,问题就解决了。
      现在看来,design by contract那本书里面讲的真是精辟,分清楚函数的功能很重要。

      有时候感觉profiling也是一件蛮有趣的事情,关键是能看到程序中许许多多不完善的地方,
并且这些地方时原来程序员所忽略的,而伴随着解决这些问题,会感觉特有挑战性。

你可能感兴趣的:(in)