mirror of
https://github.com/python/cpython.git
synced 2026-01-06 07:22:09 +00:00
gh-108362: Retarget incremental GC changes to 3.14 (#125453)
This commit is contained in:
parent
588d9fb84a
commit
dda9d0011f
2 changed files with 75 additions and 4 deletions
|
|
@ -60,7 +60,7 @@ The :mod:`gc` module provides the following functions:
|
|||
The effect of calling ``gc.collect()`` while the interpreter is already
|
||||
performing a collection is undefined.
|
||||
|
||||
.. versionchanged:: 3.13
|
||||
.. versionchanged:: 3.14
|
||||
``generation=1`` performs an increment of collection.
|
||||
|
||||
|
||||
|
|
@ -83,13 +83,13 @@ The :mod:`gc` module provides the following functions:
|
|||
returned. If *generation* is not ``None``, return only the objects as follows:
|
||||
|
||||
* 0: All objects in the young generation
|
||||
* 1: No objects, as there is no generation 1 (as of Python 3.13)
|
||||
* 1: No objects, as there is no generation 1 (as of Python 3.14)
|
||||
* 2: All objects in the old generation
|
||||
|
||||
.. versionchanged:: 3.8
|
||||
New *generation* parameter.
|
||||
|
||||
.. versionchanged:: 3.13
|
||||
.. versionchanged:: 3.14
|
||||
Generation 1 is removed
|
||||
|
||||
.. audit-event:: gc.get_objects generation gc.get_objects
|
||||
|
|
@ -142,7 +142,7 @@ The :mod:`gc` module provides the following functions:
|
|||
|
||||
See `Garbage collector design <https://devguide.python.org/garbage_collector>`_ for more information.
|
||||
|
||||
.. versionchanged:: 3.13
|
||||
.. versionchanged:: 3.14
|
||||
*threshold2* is ignored
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1058,6 +1058,30 @@ free-threaded build and false for the GIL-enabled build.
|
|||
|
||||
(Contributed by Neil Schemenauer and Kumar Aditya in :gh:`130010`.)
|
||||
|
||||
.. _whatsnew314-incremental-gc:
|
||||
|
||||
Incremental garbage collection
|
||||
------------------------------
|
||||
|
||||
The cycle garbage collector is now incremental.
|
||||
This means that maximum pause times are reduced
|
||||
by an order of magnitude or more for larger heaps.
|
||||
|
||||
There are now only two generations: young and old.
|
||||
When :func:`gc.collect` is not called directly, the
|
||||
GC is invoked a little less frequently. When invoked, it
|
||||
collects the young generation and an increment of the
|
||||
old generation, instead of collecting one or more generations.
|
||||
|
||||
The behavior of :func:`!gc.collect` changes slightly:
|
||||
|
||||
* ``gc.collect(1)``: Performs an increment of garbage collection,
|
||||
rather than collecting generation 1.
|
||||
* Other calls to :func:`!gc.collect` are unchanged.
|
||||
|
||||
(Contributed by Mark Shannon in :gh:`108362`.)
|
||||
|
||||
|
||||
Other language changes
|
||||
======================
|
||||
|
||||
|
|
@ -1486,6 +1510,36 @@ functools
|
|||
(Contributed by Sayandip Dutta in :gh:`125916`.)
|
||||
|
||||
|
||||
gc
|
||||
--
|
||||
|
||||
The cyclic garbage collector is now incremental,
|
||||
which changes the meaning of the results of
|
||||
:meth:`~gc.get_threshold` and :meth:`~gc.set_threshold`
|
||||
as well as :meth:`~gc.get_count` and :meth:`~gc.get_stats`.
|
||||
|
||||
* For backwards compatibility, :meth:`~gc.get_threshold` continues to return
|
||||
a three-item tuple.
|
||||
The first value is the threshold for young collections, as before;
|
||||
the second value determines the rate at which the old collection is scanned
|
||||
(the default is 10, and higher values mean that the old collection
|
||||
is scanned more slowly).
|
||||
The third value is meaningless and is always zero.
|
||||
|
||||
* :meth:`~gc.set_threshold` ignores any items after the second.
|
||||
|
||||
* :meth:`~gc.get_count` and :meth:`~gc.get_stats` continue to return
|
||||
the same format of results.
|
||||
The only difference is that instead of the results referring to
|
||||
the young, aging and old generations,
|
||||
the results refer to the young generation
|
||||
and the aging and collecting spaces of the old generation.
|
||||
|
||||
In summary, code that attempted to manipulate the behavior of the cycle GC
|
||||
may not work exactly as intended, but it is very unlikely to be harmful.
|
||||
All other code will work just fine.
|
||||
|
||||
|
||||
getopt
|
||||
------
|
||||
|
||||
|
|
@ -2233,6 +2287,7 @@ asyncio
|
|||
(Contributed by Yury Selivanov, Pablo Galindo Salgado, and Łukasz Langa
|
||||
in :gh:`91048`.)
|
||||
|
||||
|
||||
base64
|
||||
------
|
||||
|
||||
|
|
@ -2241,6 +2296,15 @@ base64
|
|||
(Contributed by Bénédikt Tran, Chris Markiewicz, and Adam Turner in :gh:`118761`.)
|
||||
|
||||
|
||||
gc
|
||||
--
|
||||
|
||||
* The new :ref:`incremental garbage collector <whatsnew314-incremental-gc>`
|
||||
means that maximum pause times are reduced
|
||||
by an order of magnitude or more for larger heaps.
|
||||
(Contributed by Mark Shannon in :gh:`108362`.)
|
||||
|
||||
|
||||
io
|
||||
---
|
||||
* :mod:`io` which provides the built-in :func:`open` makes less system calls
|
||||
|
|
@ -2707,6 +2771,13 @@ Changes in the Python API
|
|||
Wrap it in :func:`staticmethod` if you want to preserve the old behavior.
|
||||
(Contributed by Serhiy Storchaka and Dominykas Grigonis in :gh:`121027`.)
|
||||
|
||||
* The :ref:`garbage collector is now incremental <whatsnew314-incremental-gc>`,
|
||||
which means that the behavior of :func:`gc.collect` changes slightly:
|
||||
|
||||
* ``gc.collect(1)``: Performs an increment of garbage collection,
|
||||
rather than collecting generation 1.
|
||||
* Other calls to :func:`!gc.collect` are unchanged.
|
||||
|
||||
* The :func:`locale.nl_langinfo` function now sets temporarily the ``LC_CTYPE``
|
||||
locale in some cases.
|
||||
This temporary change affects other threads.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue