protected void _processWalks(WalkArray walkArray, int[] atVertices) {
        long[] walks = ((LongWalkArray)walkArray).getArray();
        long t1 = System.currentTimeMillis();
        for(int i=0; i < walks.length; i++) {
            long w = walks[i];
            if (ignoreWalk(w)) {
                continue;
            }
            int atVertex = atVertices[i];
            int firstKey = getFirstKey(w, atVertex);
            int secondKey = getSecondKey(w, atVertex);
            int value = getValue(w, atVertex);

            ensureExists(firstKey, secondKey);
            IntegerBuffer buffer = buffers.get(firstKey).get(secondKey);
            synchronized (buffer) {
                buffer.add(value);
            }
        }

        long tt = (System.currentTimeMillis() - t1);
        if (tt > 1000) {
            logger.info("Processing " + walks.length + " took " + tt + " ms.");
        }
    }