欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java源码分析之--ArrayList javaGC编程 

程序员文章站 2024-03-19 10:42:52
...
    有感于现在开发到了一个瓶颈,表现为对于一般的业务,能进行开发,但是只要业务稍微变化点,代码就需要进行大的改动,代码也写的比较烂,自己都不想去看自己写的代码了。于是现在准备分析下java的源码,试图提高自己的编程能力。
    现在开始付诸行动。
    首先是将src包解压,然后导入到IDE中。目前只分析了下ArrayList,到现在还没有看完,不过确实感觉代码写的不错,以前从没考虑的gc,里面居然全部提到了,例如:
private void fastRemove(int index) {
        modCount++;
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // Let gc do its work
    }
这是从源码里面拷贝的一段代码,意思是移除指定位置上面的元素,特别是
      elementData[--size] = null; // Let gc do its work 
这行代码写的很精妙,实现了两个功能,一个是移除指定位置上面的元素,这个大家一眼就能看到的,貌似将该对象指向null,之后gc就会自动来回收该内存,这个代码还有一个功能,--size将该集合的长度减少1,刚看完的时候,我还以为这里有个bug呢,还兴奋了还一会儿呢,我还以为这个长度没有相应的减少,写了一个Test之后,又没法有问题,再次分析才发现这个了。不得不佩服那些开发人员。
     modCount,如果分析ArrayList,一定会到处看到这个,仔细查找一番,你又会发现modCount又未在ArrayList里面定义,这个变量定义在AbstractList类中,ArrayList继承了AbstractList,modCount的作用,我没细细深究,我大概看了下,有点像hibernate乐观锁里面version,因为ArrayList是非线程安全的,为了防止别人修改了ArrayList对象而自己却不知道,特意加了个modCount,只要ArrayList修改,modCount就会执行modCount++。
    分析源码还有一个感触,这个集合方法也是对数组的封装,主要实现的功能无外乎CRUD,虽然看起来有十几个二十多个方法,但都是对里面的几个私有的CRUD方法进行扩充的。虽然这些方法能满足我们大部分人的需要,如果有某些特殊的需要,可以很便捷的写些方法进行再次扩充。
相关标签: java GC 编程