Java堆分析似乎在大文件摄取期间冻结

时间:2016-05-16 17:04:38

标签: java performance profiling heap

我正在尝试分析在redhat机器上运行的java 7应用程序。当我按如下方式运行时:

java -agentlib:hprof=cpu=samples,depth=10,monitor=y,thread=y ...

通过逐行读取非常大的gzip压缩文本文件来创建表类型对象的特定代码块在大约6分钟内完成。当我像这样运行时:

java -agentlib:hprof=heap=sites,depth=10,monitor=y,thread=y ...

同一个区块需要花费几个数量级的时间来完成(我估计的时间是24小时)

这是读取文件的方法(类的一部分):

private static void ingestValues()
{
    int mSize = 30000;

    pairScoresTable = new float[mSize][];
    for (int i = 0; i < pairScoresTable.length; i++) {
        pairScoresTable[i] = new float[mSize];
        Arrays.fill(pairScoresTable[i], fillVal);
    }

    try
    {

        BufferedReader bufferedReader = 
            new BufferedReader(
                new InputStreamReader(
                    new GZIPInputStream(
                        new FileInputStream(rawPath)), "US-ASCII"));
        String line = null;

        while((line = bufferedReader.readLine()) != null) { // file has 388661141 lines

            Float value = 0.0F;
            Integer i = 0;
            Integer j = 0;

            // extract value, i and j by parsing line...

            pairScoresTable[i][j] = value;
            pairScoresTable[j][i] = value;

        }
        bufferedReader.close();
    }
    catch(Exception e)
    {
        return;
    }

    return;
}

所以它基本上读取一个文件,每一行都被格式化,以描述{2}矩阵valuepairScoresTable的位置。

为什么执行时间差异如此之大?有没有办法更快地对这段代码进行堆分析而不必重构它?

0 个答案:

没有答案