金山实习周记(1)——初次任务

    上星期五刚到金山报到时是兴奋的,信心满满的,但现在。。。

初次任务

     在报到之后,老大让三个方向(UI,底层IO,算法)的人给我分别介绍是做什么的。由于在这三个方向中,我最熟悉算法,因此果断选算法。之后,老大讲解了线路图:看文档->优化内存->搞算法。

     既然决定了线路,那就踏出第一步——看文档。由于文档很大一部分都是细节性内容,所以本着以后用到再查的想法,把文档浏览一遍就跟老大说搞定了。然后,终于接到第一个任务:用POI打开一个XLS的文档,占用的内存量十分大(如:一个4.6M的XLS文档,用POI载入内存后,查看内存时会发现其占了113M),看下有哪里可以优化的。

     面对这个任务既兴奋又疑惑。兴奋的是这将是一个有趣的任务,疑惑的是这样的任务怎么会给一个新来的实习做。不过,很快就把疑惑给忘了,全力进行优化任务。用MAT很快就发现在内存有一大堆unreachable object(占了使用内存的80%以上)。刚接触JAVA,也不知道这是什么来的,就查了相关的资料。结果发现是还没被回收的垃圾。但可以调用System.gc()告诉GC去回收。结果这一调用使unreachable object减少了18%。

     很自然地有了这个想法:既然一次能减少18%,那么调用多次不就行了。但调用多次的结果却与只调用一次的相同。面对这一疑问,也只能再查了,发现System.gc()并不保证GC会确切的进行回收。不保证的话,那么就想办法从更底层进行操纵。

      但按照这一想法,查了一天的资料也找不到解决的方法。于是到星期四时就将目前的成果写成文档交给老大看看。“做得不错,不过没找到点子上。你不应专注于GC这部分,而应专注于POI有哪些是需要优化的。因为GC的回收由JVM来管理。我们将精力放到这边意义不大。”对了这一评论,我无言以对。因为在之前查资料时,就清楚GC的机制,但仍想着从这方向进行优化。“看来你仍不会从JAVA的方向来考虑问题,接下来就做个独立的小项目来熟悉下JAVA,然后再写算法吧。”

后记

      现在回过来看这件事,其实初始任务只是一次测试,测试我会不会用JAVA思想来想问题。然而当时的想法却是JVM不支持,那么即使破坏JVM的某些机制,也要使得其支持。但这样的想法并不符合JAVA的编程思想。

      看来换一种语言,也要换一种编程思想,换上适合这种语言特点的方式来编程的思想。这可以说是这次任务的最大收获吧。

posted @ 2011-07-09 11:30  风中之炎  阅读(3825)  评论(9编辑  收藏  举报