Update gc.xml (#498)

This commit is contained in:
MIKHAIL ALFEROV
2023-11-24 10:33:02 +03:00
committed by GitHub
parent 817799dbca
commit 80b4a74bc7

View File

@ -42,9 +42,9 @@ $a = "new string";
<para>
В данном примере создаётся новый символ <literal>a</literal> в текущей области видимости
и новый контейнер переменной с типом <type>string</type> и значением <literal>new string</literal>.
Бит "is_ref" по умолчанию задаётся равным &false;, т.к. не создано ни одной пользовательской
ссылки. Значение же "refcount" задаётся равным <literal>1</literal>, т.к. только одно имя переменной
указывает на данный контейнер. Обратите внимание, что ссылки (т.е. "is_ref" равно &true;) с "refcount" равным <literal>1</literal>
Бит "is_ref" по умолчанию задаётся равным &false;, т. к. не создано ни одной пользовательской
ссылки. Значение же "refcount" задаётся равным <literal>1</literal>, т. к. только одно имя переменной
указывает на данный контейнер. Обратите внимание, что ссылки (т. е. "is_ref" равно &true;) с "refcount" равным <literal>1</literal>
обрабатываются так, как если бы они не были ссылками (то есть как "is_ref" было бы &false;). Если у вас установлен <link xlink:href="&url.xdebug;">Xdebug</link>, то
вы можете вывести эту информацию, вызвав функцию <function>xdebug_debug_zval</function>.
</para>
@ -91,7 +91,7 @@ a: (refcount=2, is_ref=0)='new string'
</example>
</para>
<para>
Счётчик ссылок здесь равен <literal>2</literal>, т.к.
Счётчик ссылок здесь равен <literal>2</literal>, т. к.
<varname>a</varname> и <varname>b</varname> ссылаются на один
и тот же контейнер переменной. PHP достаточно умён, чтобы
не копировать контейнер, пока в этом нет необходимости. Как только
@ -170,7 +170,7 @@ a: (refcount=1, is_ref=0)=array (
</example>
</para>
<para>
Результат - три контейнера: <varname>a</varname>, <varname>meaning</varname> и <varname>number</varname>.
Результат три контейнера: <varname>a</varname>, <varname>meaning</varname> и <varname>number</varname>.
Похожие правила применяются и для увеличения и уменьшения "refcounts".
Ниже мы добавляем ещё один элемент массива и устанавливаем ему значение уже существующего элемента:
</para>
@ -314,8 +314,8 @@ a: (refcount=2, is_ref=1)=array (
<title>Суть проблемы</title>
<para>
Хотя во всех областях видимости больше нет имени переменной, ссылающейся на
данную структуру, она не может быть очищена, т.к. элемент массива "1" по-прежнему
ссылается на этот массив. Т.к. теперь нет никакой возможности пользователю
данную структуру, она не может быть очищена, т. к. элемент массива "1" по-прежнему
ссылается на этот массив. Т. к. теперь нет никакой возможности пользователю
удалить эти данные, то мы получили утечку памяти.
К счастью, PHP удалит эти данные при завершении запроса, но до этого момента
данные будут занимать ценное место в памяти. Такая ситуация часто бывает, когда
@ -422,7 +422,7 @@ a: (refcount=2, is_ref=1)=array (
может стать то, что некоторые части вашего приложения могут быть требовательными
ко времени. В этих случаях вы, возможно, не захотите постороннего вмешательства
сборщика мусора. Разумеется, выключая сборщик мусора в определённых
местах вашего приложения вы рискуете получить утечку памяти, т.к.
местах вашего приложения вы рискуете получить утечку памяти, т. к.
потенциально некоторые корни могут не поместиться в ограниченный
корневой буфер. Более целесообразно будет вызвать <function>gc_collect_cycles</function>
непосредственно перед вызовом <function>gc_disable</function> для освобождения памяти и уже