|
OFF: Есть ли сборщик мусора в 1С? | ☑ | ||
---|---|---|---|---|
0
busy1
28.12.15
✎
12:36
|
Добрый день эксперты. НЕ вопрос а просто рассуждение на свободную тему. В современных системах разработки есть такое понятие как программный мусор это когда на переменную нет ссылок, то она помечается как мусор и впоследствии удаляется. Программист может принудительно присвоить значение null, она пометиться как мусор и удалиться из памяти. Что то подобное происходит в 1С? Как Вы думаете, когда нибудь будет в синтаксис проверке проверяться свободные переменные, в целях оптимизации памяти?
|
|||
1
Lama12
28.12.15
✎
12:48
|
Вообще-то уборка мусора производится. Принудительно удалять переменную из памяти вряд ли нужно (по крайней мере в 1С). Переменные контекста обычно доступны в "Выполнить". Присвоение NULL не сильно спасет ситуацию. Ведь переменные у нас не типизированные, а значит они в памяти должны храниться в какой-то "оболочке" обезопасывающей работу с переменной. Да и смысл оптимизировать несколько по памяти ради нескольких переменных? Ну сколько мы выиграем, 1 - 2 Mb? Все что больше, очищается присвоением Неопределено, но переменная живет.
|
|||
2
Рэйв
28.12.15
✎
12:50
|
(0)Фреймворк и в африке фреймворк. И сам по идее обо всем заботится.
|
|||
3
ДенисЧ
28.12.15
✎
12:53
|
мусор ещё в 77 собирался...
|
|||
4
GROOVY
28.12.15
✎
12:59
|
Переменная умирает вместе с контекстом в котором она была создана. Чего тут оптимизировать?!
|
|||
5
vde69
28.12.15
✎
13:19
|
(4) эммм, для 1с это далеко не факт... пробегала статья как закрыть форму, но код и переменные из формы остается доступным...
|
|||
6
Лефмихалыч
28.12.15
✎
13:23
|
(0) в 1С программист сам памятью не управляет, за него это делает платформа. Так что сборщик мусора есть.
|
|||
7
MM
28.12.15
✎
13:27
|
(6) Механизм 1С называется подсчёт ссылок, это не сборка мусора. Которая устроена сложнее и умет удалять объекты уже не нужные, но из-за циклических ссылок не обнулившие счётчики ссылок.
|
|||
8
Лефмихалыч
28.12.15
✎
13:30
|
(7) и ты продемонстрировать это можешь на примере?
|
|||
9
Dotoshin
28.12.15
✎
13:34
|
Если не ошибаюсь, то конструкция ИмяПеременной = Неопределено; освобождает память занятую этой переменной...
|
|||
10
busy1
28.12.15
✎
13:34
|
Про контроль над неиспользованными ссылками в систаксис проверке я так понял, ни кто не слышал. Я думал может быть в 1C: Enterprise Development Tools что то изменилось в эту сторону.
|
|||
11
busy1
28.12.15
✎
13:35
|
(8) А чем (5) не достойный пример.
|
|||
12
Xapac
28.12.15
✎
13:36
|
(11)это вброс. ты докажи
|
|||
13
MM
28.12.15
✎
13:37
|
(8) Как обработка остаётся висеть в памяти после закрытия её формы, когда в конфигураторе уже записали новую версию, да.
Или можно скушать память конструкциями в цикле: Ст = новый Структура; Ст.Вставить(НуОченьДлиннаяСтрока); Ст.Вставить(Ст); |
|||
14
busy1
28.12.15
✎
13:38
|
vde69 не плохой специалист
|
|||
15
Xapac
28.12.15
✎
13:39
|
(14) а какой номер у его сертификата?
|
|||
16
busy1
28.12.15
✎
13:40
|
(15) Смеешься. При чем тут сертификаты. Я сужу по его участию в форуме.
|
|||
17
busy1
28.12.15
✎
13:41
|
Харас у тебя самого есть номера сертификатов, а диплом по специализации ИТ ?
|
|||
18
Xapac
28.12.15
✎
13:44
|
(16)Специалист по спаму на форуме?
(17)есть и то и другое. но это же к теме не относится. по теме я бы с радостью почитал какую-нибудь работу или документ, но я не привык принимать всерьёз вбросы на форумах. |
|||
19
busy1
28.12.15
✎
13:47
|
К сожалению что касается работы Платформы то литературы тут не много.
|
|||
20
Dotoshin
28.12.15
✎
13:47
|
(18) Вот официальный документ, о особенностях хранения значений переменных: http://its.1c.ru/db/metod8dev/content/2603/hdoc
|
|||
21
НЕА123
28.12.15
✎
13:47
|
(13)+1
(7) так винда так работает. конструкции (13) дороговато вычищать. |
|||
22
MM
28.12.15
✎
13:49
|
(21) .NET (кто скажет что это не винда?) и Java используют настоящую сборку мусора.
|
|||
23
busy1
28.12.15
✎
13:49
|
(21) Конструкции (13) как бы очевидный мусор так как видно что объект ссылается сам на себя и не имеет других ссылок.
|
|||
24
busy1
28.12.15
✎
13:50
|
(22) Вот как раз я начал изучать Java в связи с этим и возникла у меня эта тема в голове.
|
|||
25
Оболтус
28.12.15
✎
13:51
|
Хоспади, 20 постов а уже успели письками помериться...
|
|||
26
НЕА123
28.12.15
✎
13:51
|
(22)
и конструкции (13) уберут автоматом? |
|||
27
Лефмихалыч
28.12.15
✎
13:54
|
(13) это не компилируется
|
|||
28
MM
28.12.15
✎
13:55
|
(23) Можешь усложнить:
М1 = Новый Массив; М2 = Новый Массив; М2.Вставить(М1); М1.Вставить(НуОченьДлиннаяСтрока); М1.Вставить(М2); (27) Да, замени структуру на массив. |
|||
29
Лефмихалыч
28.12.15
✎
13:56
|
(28) все равно не компилируется
|
|||
30
Stim
28.12.15
✎
13:57
|
в 1С только генератор мусора есть, его генерят разработчики, вводя непривязанные ни к чему процедуры и функции
|
|||
31
los_hooliganos
28.12.15
✎
13:59
|
В 1С нет уборщика мусора. Объекты нельзя финализировать.
|
|||
32
НЕА123
28.12.15
✎
14:00
|
(29)
СЗ = новый СписокЗначений; СЗ.Добавить(НуОченьДлиннаяСтрока); СЗ.Добавить(СЗ); |
|||
33
los_hooliganos
28.12.15
✎
14:00
|
Для проверки что мусор переменной убран, используй попытка исключения с вызовом нужной тебе переменной.
|
|||
34
Лефмихалыч
28.12.15
✎
14:07
|
(32) Ага. Такой хреновиной только что без проблем догнал занятую процессов 1С память до 2.4Гб и она ни куда не девается. 8.3.6.2299
Сборщик мусора есть, но он тупой, как пробка, - не понимает циклических ссылок. |
|||
35
orefkov
28.12.15
✎
14:14
|
(0)
Докладываю как есть. Управление памятью в 1С (что 7.7, что 8.Х) реализовано на обычном подсчёте ссылок (refcouning). Объект уничтожается сразу, тогда, только тогда, когда его счётчик ссылок достигает нуля. Отложенной сборки мусора нет. Выявления циклических ссылок нет. Перечисления хранимых ссылок нет. Для внутренних объектов движка возможно существует возможность создания "слабых ссылок", для объектов прикладного кода такой возможности нет. м = Новый Массив; м.Добавить(м); будет жить вечно. |
|||
36
MM
28.12.15
✎
14:14
|
(34) 1С не собирает мусор, а считает ссылки, это гораздо проще в реализации. И так сделано в технологии СОМ.
(31) Так и создавать свои классы нельзя, а объекты только предопределённые 1С. Финализатор нужен только для неуправляемых ресурсов, а они и не входят в состав 1С. Внешние СОМ-объекты раз создал, то будь добр и следи за ними, программист. |
|||
37
orefkov
28.12.15
✎
14:17
|
(36)
>> это гораздо проще в реализации Проще, но для серверной программы я считаю непреемлемо так разбрасываться памятью. Для ларька, где комп на ночь выключает, сойдёт. |
|||
38
busy1
28.12.15
✎
14:23
|
(37) полностью поддерживаю. На мой взгляд давно пора заняться этими вещами. А то 1С говорит, мол мы такая крутая система, а по факту 96 год.
|
|||
39
vde69
28.12.15
✎
14:23
|
(37) кстати про серверное исполнение согласен на 100%
ИХМО серверная работа с памятью должна быть сделана более серьезно, я думаю, что в серверных модулях стоит перейти к типизации и декларированию переменных а более сложные объекты зафигачить через create() и free() правда тогда придется переходить к обработчикам защиты данных, но по моему другого пути нет... |
|||
40
ObjectRelation Model
28.12.15
✎
14:25
|
(39) не надо никаких Free, надо нормальный GC как в .NET
|
|||
41
vde69
28.12.15
✎
14:25
|
и вообще надо запретить серверные процедуры писать на русском, только английский синтаксис, только хард код :)
зато будет сразу понятен контекст :) |
|||
42
ObjectRelation Model
28.12.15
✎
14:26
|
(41) и ООП
|
|||
43
orefkov
28.12.15
✎
14:29
|
(39)
Для прикладного кода всё можно сделать вообще прозрачно. К примеру, я сейчас использую периодически скриптовый движок AngelScript. Там используется подсчёт ссылок плюс инкрементальный сборщик мусора. Всё таки циклические ссылки попадаются гораздо реже обычных объектов, и получается что 99% объектов быстро освобождаются по счётчику ссылок, и лишь оставшиеся из-за циклических ссылок живут до уборки. Так что всё довольно быстро отрабатывает. |
|||
44
MM
28.12.15
✎
14:32
|
(43) А что с фрагментацией памяти делать? Это для серверных процессов особенно важно.
|
|||
45
orefkov
28.12.15
✎
14:36
|
(44)
Это решается хорошим грамотным аллокатором, а не сборкой мусора. |
|||
46
Torquader
28.12.15
✎
15:01
|
Счётчики ссылок - это стандартная реализация OLE-объектов, на которых и построена 1С.
В принципе, так как в 1С не предполагается создания своих объектов, то циклические ссылки и самовложенные объекты могут возникнуть только по желанию разработчика, так что никто не предполагал делать защиту от них. Например, вызов функции "ЗаписВСтрокуВнутр" для таких объектов тоже приведёт в весьма интересному результату, причём, боюсь, что к более печальному, чем какая-то потерянная память. |
|||
47
vde69
28.12.15
✎
15:11
|
(46) счетчики ссылок начали активно применять в виндовс 3.1 для дискрипторов (процессов, потоков, файлов и т.д.)
так, что это намного раньше ОЛЕ ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |