citylots.json上的aeson基准空间泄漏(?)

citylots.json上的aeson基准空间泄漏(?),json,haskell,memory-leaks,aeson,Json,Haskell,Memory Leaks,Aeson,我一直在使用解析器的基准测试套件,并将它们的严格解析器和懒惰解析器进行了比较,得到了一些令人惊讶的结果: 在随附的所有数据集上,严格的解析器总是需要更多的时间(这是预期的),但从不节省任何空间 在上运行基准测试比其他同等大小的数据集花费的时间和空间要多得多 要运行基准测试,请执行以下操作: cd aeson; cabal install cd benchmark; make ./AesonParse_p [blksz] [runs] [path-to-json] +RTS -p -hc 以

我一直在使用解析器的基准测试套件,并将它们的严格解析器和懒惰解析器进行了比较,得到了一些令人惊讶的结果:

  • 在随附的所有数据集上,严格的解析器总是需要更多的时间(这是预期的),但从不节省任何空间
  • 在上运行基准测试比其他同等大小的数据集花费的时间和空间要多得多
要运行基准测试,请执行以下操作:

cd aeson; cabal install
cd benchmark; make
./AesonParse_p [blksz] [runs] [path-to-json] +RTS -p -hc
以下是我打开
+RTS
时获得的一些配置文件:

从配置文件中可以追溯到
Data.Aeson.Parser.Internal
中的
jstring\uu
,有人知道发生了什么吗

    Sun Nov 15 13:56 2015 Time and Allocation Profiling Report  (Final)

       AesonParse_p +RTS -p -hc -RTS 105532 700 json-data/jp100.json

    total time  =        3.42 secs   (3417 ticks @ 1000 us, 1 processor)
    total alloc = 4,191,614,072 bytes  (excludes profiling overheads)

COST CENTRE          MODULE                     %time %alloc

jstringbang_         Data.Aeson.Parser.Internal  96.4   93.1
arrayValues          Data.Aeson.Parser.Internal   1.7    1.9
object_'             Data.Aeson.Parser.Internal   1.1    1.9
main.\.\.loop.refill Main                         0.7    3.2


                                                                         individual     inherited
COST CENTRE               MODULE                       no.     entries  %time %alloc   %time %alloc

MAIN                      MAIN                         116           0    0.0    0.0   100.0  100.0
 main                     Main                         233           0    0.0    0.0   100.0  100.0
  main.blkSize            Main                         242           1    0.0    0.0     0.0    0.0
  main.count              Main                         239           1    0.0    0.0     0.0    0.0
  main.\                  Main                         234           1    0.0    0.0   100.0  100.0
   main.\.\               Main                         235           1    0.0    0.0   100.0  100.0
    main.\.\.rate         Main                         252           1    0.0    0.0     0.0    0.0
    main.\.\.loop         Main                         238         701    0.1    0.0   100.0  100.0
     object_'             Data.Aeson.Parser.Internal   245           0    1.1    1.9    99.2   96.8
      jstring_        Data.Aeson.Parser.Internal   247           0   96.4   93.1    98.1   94.9
       array_'            Data.Aeson.Parser.Internal   249           0    0.0    0.0     1.7    1.9
        arrayValues       Data.Aeson.Parser.Internal   251           0    1.7    1.9     1.7    1.9
     main.\.\.loop.refill Main                         241           1    0.7    3.2     0.7    3.2
 CAF                      GHC.IO.FD                    217           0    0.0    0.0     0.0    0.0
 CAF                      GHC.IO.Encoding.Iconv        215           0    0.0    0.0     0.0    0.0
 CAF                      Text.Read.Lex                209           0    0.0    0.0     0.0    0.0
 CAF                      GHC.IO.Handle.FD             202           0    0.0    0.0     0.0    0.0
 CAF                      GHC.Conc.Signal              198           0    0.0    0.0     0.0    0.0
 CAF                      GHC.IO.Handle.Text           191           0    0.0    0.0     0.0    0.0
 CAF                      GHC.IO.Encoding              188           0    0.0    0.0     0.0    0.0
 CAF                      Data.Time.Clock.UTC          129           0    0.0    0.0     0.0    0.0
 CAF                      Data.Aeson.Parser.Internal   124           0    0.0    0.0     0.0    0.0
  array_'                 Data.Aeson.Parser.Internal   248           1    0.0    0.0     0.0    0.0
   arrayValues            Data.Aeson.Parser.Internal   250           1    0.0    0.0     0.0    0.0
  jstringbang_            Data.Aeson.Parser.Internal   246           1    0.0    0.0     0.0    0.0
  object_'                Data.Aeson.Parser.Internal   244           1    0.0    0.0     0.0    0.0
 CAF                      Main                         123           0    0.0    0.0     0.0    0.0
  main                    Main                         232           1    0.0    0.0     0.0    0.0
   main.blkSize           Main                         243           0    0.0    0.0     0.0    0.0
   main.count             Main                         240           0    0.0    0.0     0.0    0.0
   main.\                 Main                         236           0    0.0    0.0     0.0    0.0
    main.\.\              Main                         237           0    0.0    0.0     0.0    0.0

据我所知,这是意料之中的事

文件citylots.json是一个167 MB的文件,由单个对象组成。AesonParse程序正在内存中构建整个对象,这解释了配置文件中的内存渐变


相比之下,companys.json和enron.json的文件是“面向行”的json文件——每行都是一个json对象,对象之间没有逗号。对这些文件中的任何一个运行AesonParse时,它只读取第一行。

其他类似大小的json数据集是什么?我将citylots截断为~20MB,并与