@@ -172,6 +172,29 @@ Improved Error Messages
172172     ValueError: too many values to unpack (expected 3, got 4) 
173173
174174
175+ whatsnew314-incremental-gc :
176+ 
177+ Incremental garbage collection
178+ ------------------------------ 
179+ 
180+ The cycle garbage collector is now incremental.
181+ This means that maximum pause times are reduced
182+ by an order of magnitude or more for larger heaps.
183+ 
184+ There are now only two generations: young and old.
185+ When :func: `gc.collect ` is not called directly, the
186+ GC is invoked a little less frequently. When invoked, it
187+ collects the young generation and an increment of the
188+ old generation, instead of collecting one or more generations.
189+ 
190+ The behavior of :func: `!gc.collect ` changes slightly:
191+ 
192+ * ``gc.collect(1) ``: Performs an increment of garbage collection,
193+   rather than collecting generation 1.
194+ * Other calls to :func: `!gc.collect ` are unchanged.
195+ 
196+ (Contributed by Mark Shannon in :gh: `108362 `.)
197+ 
175198Other Language Changes
176199====================== 
177200
@@ -283,6 +306,35 @@ functools
283306  (Contributed by Dominykas Grigonis in :gh: `119127 `.)
284307
285308
309+ gc
310+ --
311+ 
312+ The cyclic garbage collector is now incremental,
313+ which changes the meaning of the results of
314+ :meth: `~gc.get_threshold ` and :meth: `~gc.set_threshold `
315+ as well as :meth: `~gc.get_count ` and :meth: `~gc.get_stats `.
316+ 
317+ * For backwards compatibility, :meth: `~gc.get_threshold ` continues to return
318+   a three-item tuple.
319+   The first value is the threshold for young collections, as before;
320+   the second value determines the rate at which the old collection is scanned
321+   (the default is 10, and higher values mean that the old collection
322+   is scanned more slowly).
323+   The third value is meaningless and is always zero.
324+ 
325+ * :meth: `~gc.set_threshold ` ignores any items after the second.
326+ 
327+ * :meth: `~gc.get_count ` and :meth: `~gc.get_stats ` continue to return
328+   the same format of results.
329+   The only difference is that instead of the results referring to
330+   the young, aging and old generations,
331+   the results refer to the young generation
332+   and the aging and collecting spaces of the old generation.
333+ 
334+ In summary, code that attempted to manipulate the behavior of the cycle GC
335+ may not work exactly as intended, but it is very unlikely to be harmful.
336+ All other code will work just fine.
337+ 
286338http
287339---- 
288340
@@ -415,6 +467,14 @@ asyncio
415467  reduces memory usage.
416468  (Contributed by Kumar Aditya in :gh: `107803 `.)
417469
470+ gc
471+ --
472+ 
473+ * The new :ref: `incremental garbage collector  <whatsnew314-incremental-gc >`
474+   means that maximum pause times are reduced
475+   by an order of magnitude or more for larger heaps.
476+   (Contributed by Mark Shannon in :gh: `108362 `.)
477+ 
418478Deprecated
419479========== 
420480
@@ -617,6 +677,13 @@ Changes in the Python API
617677  Wrap it in :func: `staticmethod ` if you want to preserve the old behavior.
618678  (Contributed by Serhiy Storchaka and Dominykas Grigonis in :gh: `121027 `.)
619679
680+ * The :ref: `garbage collector is now incremental  <whatsnew314-incremental-gc >`,
681+   which means that the behavior of :func: `gc.collect ` changes slightly:
682+ 
683+   * ``gc.collect(1) ``: Performs an increment of garbage collection,
684+     rather than collecting generation 1.
685+   * Other calls to :func: `!gc.collect ` are unchanged.
686+ 
620687* The :func: `locale.nl_langinfo ` function now sets temporarily the ``LC_CTYPE ``
621688  locale in some cases.
622689  This temporary change affects other threads.
0 commit comments