Title: Inc GC in 3.14t can defer too much, resulting in high memory use · Issue #148937 · python/cpython · GitHub
Open Graph Title: Inc GC in 3.14t can defer too much, resulting in high memory use · Issue #148937 · python/cpython
X Title: Inc GC in 3.14t can defer too much, resulting in high memory use · Issue #148937 · python/cpython
Description: Bug report Bug description: In the process of testing the default build incremental GC, I noticed a problem with the 3.14t GC. Shortly before the 3.14.0 release, I added some additional logic to defer GC triggering if the process memory ...
Open Graph Description: Bug report Bug description: In the process of testing the default build incremental GC, I noticed a problem with the 3.14t GC. Shortly before the 3.14.0 release, I added some additional logic to de...
X Description: Bug report Bug description: In the process of testing the default build incremental GC, I noticed a problem with the 3.14t GC. Shortly before the 3.14.0 release, I added some additional logic to de...
Opengraph URL: https://github.com/python/cpython/issues/148937
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Inc GC in 3.14t can defer too much, resulting in high memory use","articleBody":"# Bug report\n\n### Bug description:\n\nIn the process of testing the default build incremental GC, I noticed a problem with the 3.14t GC. Shortly before the 3.14.0 release, I [added](https://github.com/python/cpython/pull/133464) some additional logic to defer GC triggering if the process memory use has not increased by 10% since the last collection. Unfortunately that does not work well with how mimalloc handles memory. It does not promptly return memory to the OS or mark pages as unused (e.g. with madvise). So, the process size from the point of view of the OS does not decrease after the GC frees cyclic trash.\n\nFor programs that create even modest amounts of cyclic garbage, this is a major problem. It acts as if the GC threshold has been set to 40x the \"threshold0\" value. By default, that means full GC collection every 80,000 net new objects. This is not a continuous memory leak but it means the process uses uses way more memory than it should.\n\nThe simple fix would be to just remove that process size based defer. However, that would result in regressing on the GH-132917 issue, so I wouldn't recommend that. I have a fairly simple fix that \"asks mimalloc\" how much memory is being used, rather than asking the OS. Based on my testing, that works well.\n\n### CPython versions tested on:\n\n3.14\n\n### Operating systems tested on:\n\nLinux\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-148940\n* gh-149371\n* gh-149475\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/nascheme","@type":"Person","name":"nascheme"},"datePublished":"2026-04-23T21:31:38.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/148937/cpython/issues/148937"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:6179410c-5f13-3b0a-2225-fa46cfd66d3a |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BCF0:258FA1:E87DD0:137DFAD:6A52D01C |
| html-safe-nonce | 6d38e2a2d3b5a5c4f3200ef61aefd9db50c5c784747ff31cba1ac52c43abb116 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQ0YwOjI1OEZBMTpFODdERDA6MTM3REZBRDo2QTUyRDAxQyIsInZpc2l0b3JfaWQiOiI1NDU4MTc1MjEwNDA5ODczNDM2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 23b0c5684670a0ee75a1ad953b528ec44ad1f05181cddee85e447c4b80be8f34 |
| hovercard-subject-tag | issue:4319011492 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/148937/issue_layout |
| twitter:image | https://opengraph.githubassets.com/647875138ba01bb738cdb302f1f6d99b29a31c867a1ff34057b6a25b42d3f106/python/cpython/issues/148937 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/647875138ba01bb738cdb302f1f6d99b29a31c867a1ff34057b6a25b42d3f106/python/cpython/issues/148937 |
| og:image:alt | Bug report Bug description: In the process of testing the default build incremental GC, I noticed a problem with the 3.14t GC. Shortly before the 3.14.0 release, I added some additional logic to de... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | nascheme |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width