)]}'
{
  "commit": "e7a09e316dbbfff5d23cbb9687f7b0a5d44e7da0",
  "tree": "77cf601c487d2c79e5615f83b758ecaf2f46bd7f",
  "parents": [
    "f8f5979aa24668e0668b5dc0983ce871c430e846"
  ],
  "author": {
    "name": "Martin Fick",
    "email": "quic_mfick@quicinc.com",
    "time": "Mon Aug 14 21:48:55 2023 -0600"
  },
  "committer": {
    "name": "Matthias Sohn",
    "email": "matthias.sohn@sap.com",
    "time": "Sat Aug 26 16:16:43 2023 +0200"
  },
  "message": "Introduce core.packedIndexGitUseStrongRefs config key\n\nIntroduce a core.packedIndexGitUseStrongRefs configuration key, which\ndefaults to true so that the current behavior does not change. However,\nsetting it to false allows soft references to be used for Pack indices\ninstead of strong references so that they can be garbage collected when\nthere is memory pressure.\n\nPack objects can be large when associated with pack files with large\nobject counts, and this memory is not really accounted for or tracked by\nthe WindowCache and it can be very substantial at times, especially with\nmany large object count projects. A particularly problematic use case is\nGerrit\u0027s ls-projects command which loads very little data in the\nWindowCache via ByteWindows, but ends up loading and holding many entire\nindices in memory, sometimes even after the ByteWindows for their Pack\nobjects have already been garbage collected since they won\u0027t get cleared\nuntil after a new ByteWindow is loaded. By using SoftReferences, single\nuse indices can get cleared when there is memory pressure and OOMs can\nbe easily avoided, drastically reducing the amount of memory required to\nperform an ls-projects on large sites with many projects and large\nobject counts.\n\nOn one of our test sites, an ls-projects command with strong index\nreferences requires more than 66GB of heap to complete successfully,\nwith soft index references it requires less than 23GB.\n\nChange-Id: I3cb3df52f4ce1b8c554d378807218f199077d80b\nSigned-off-by: Martin Fick \u003cquic_mfick@quicinc.com\u003e\nSigned-off-by: Matthias Sohn \u003cmatthias.sohn@sap.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3495813e76138c1d91721f826bb007c68741e224",
      "old_mode": 33188,
      "old_path": "Documentation/config-options.md",
      "new_id": "5651001bcead3737590c78de9350cae6e69cb7f5",
      "new_mode": 33188,
      "new_path": "Documentation/config-options.md"
    },
    {
      "type": "modify",
      "old_id": "a3596541fe5b012e518eb7a529fda41a3a3b510a",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackTest.java",
      "new_id": "e1509456e5b6a02ff183c43a3c44cd4ec036ec65",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackTest.java"
    },
    {
      "type": "modify",
      "old_id": "84b2987a9aaf7ae5b9d432655d985a17c9b8136d",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/META-INF/MANIFEST.MF",
      "new_id": "0b5e8bf169f66b142159832352aca42dd514d667",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/META-INF/MANIFEST.MF"
    },
    {
      "type": "modify",
      "old_id": "0ef38db3176a7aaf43325e23e46d7b0edf866d06",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java",
      "new_id": "579f9317953eb683a7320aa5d9b923a85f57ee75",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java"
    },
    {
      "type": "modify",
      "old_id": "2b5586a2ceb35f944cc22cb00e37fd46e33402c3",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/Pack.java",
      "new_id": "90f9811679b3c296928fbef153fe205a8f590ee6",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/Pack.java"
    },
    {
      "type": "modify",
      "old_id": "85b2d34a9239e1991bd75771f0836dd5b33221bf",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java",
      "new_id": "28f6250a22579f7768037abaf065c075e8cc0b6a",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java"
    },
    {
      "type": "modify",
      "old_id": "25653b3ce3f371fbdb24088a36acab1a280e6c77",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java",
      "new_id": "81537dd46c2a3db69099386b142c62d20ec63da9",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "987584f640b000fcc8667ece7001f184f990e9d8",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/util/Optionally.java"
    },
    {
      "type": "modify",
      "old_id": "7776b006251b4fab2e17828ba26e52c981ab28d2",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java",
      "new_id": "d812eacb6b2491317763fe996f85873002434803",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java"
    },
    {
      "type": "modify",
      "old_id": "a12f652598817b166c60ec1d7ef808a3ffeea342",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCacheConfig.java",
      "new_id": "27795ab96ba4ba22a55ecfa6a89c829f3b2340a7",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCacheConfig.java"
    }
  ]
}
