- 1
- 2
- 3
- 4
- 5
- 6
public static class GC
{
public static void KeepAlive(Object obj)
{
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−137
public static class GC
{
public static void KeepAlive(Object obj)
{
}
}
Супер метод в ГЦ. И более того - рабочий метод :). Работает на 100%. Кто раскажет почему :)?
inkanus-gray 20.03.2017 15:50 # +9
Выдвину гипотезу: промежуток времени, в течение которого объект жив, всегда непрерывен. Сборщик мусора начнёт работать только после последнего упоминания объекта в коде. Значит, можно гарантировать, что до вызова GC.KeepAlive(obj) объект obj не уберётся мусоросборщиком. Поскольку KeepAlive ничего не делает с объектом, то после вызова этого метода объект можно спокойно удалить.
Но как мусоросборщик определяет, что до вызова GC.KeepAlive(obj) объект нельзя удалять? Он сканирует весь исполнимый образ на предмет упоминания obj?
roman-kashitsyn 20.03.2017 16:00 # +9
Тред, который вызывает KeepAlive, должен иметь ссылку на объект, чтобы передать её в KeepAlive, нет?
barop 20.03.2017 17:59 # −13
MilosTeodosic 20.03.2017 17:59 # −7
pdro33 21.03.2017 19:53 # −7
MOCKBA_O4KO 20.03.2017 17:59 # −8
pdro17 21.03.2017 19:49 # −9
bagor 20.03.2017 17:59 # −13
1_14sun 20.03.2017 17:59 # −7
pdro12 21.03.2017 19:47 # −8
guestinh0 20.03.2017 17:59 # −8
3_16dar 20.03.2017 18:00 # −7
pdro37 21.03.2017 19:54 # −7
bagor 20.03.2017 18:00 # −9
pdro3 21.03.2017 19:44 # −7
pdro30 21.03.2017 19:52 # −8
MOCKBA_O4KO 20.03.2017 18:00 # −6
pdro34 21.03.2017 19:53 # −8
pdro41 21.03.2017 19:55 # −6
4_14sun 20.03.2017 18:01 # −8
pdro13 21.03.2017 19:47 # −7
pdro8 21.03.2017 19:46 # −7
3_29dar 20.03.2017 17:59 # −8
3_16dar 20.03.2017 18:01 # −8
pdro6 21.03.2017 19:45 # −8
pdro15 21.03.2017 19:48 # −6
pdro22 21.03.2017 19:50 # −9
pdro35 21.03.2017 19:54 # −8
MilosTeodosic 20.03.2017 18:00 # −7
ASD_77 20.03.2017 16:39 # −8
Все верно. Что бы не дать ГЦ собрать мусор вызывая пустой метод KeepAlive(x), x - будет помещен в стэк (для вызова метода KeepAlive) а значит для ГЦ обьект будет отмечен как используем и не будет собран :)
0_14sun 20.03.2017 17:59 # −7
pdro25 21.03.2017 19:51 # −7
pdro36 21.03.2017 19:54 # −7
2_14sun 20.03.2017 17:59 # −7
XEP 20.03.2017 17:59 # −8
pdro7 21.03.2017 19:46 # −7
XEP 20.03.2017 18:00 # −8
barop 20.03.2017 18:00 # −13
bagor 20.03.2017 18:01 # −14
pdro21 21.03.2017 19:50 # −8
pdro23 21.03.2017 19:50 # −7
pdro28 21.03.2017 19:52 # −7
pdro1 21.03.2017 19:44 # −8
pdro29 21.03.2017 19:52 # −7
pdro42 21.03.2017 19:56 # −7
-___- 21.03.2017 20:23 # −7
guestinh0 20.03.2017 18:00 # −8
pdro32 21.03.2017 19:53 # −8
3_28dar 20.03.2017 18:00 # −6
pdro9 21.03.2017 19:46 # −6
3_29dar 20.03.2017 18:00 # −6
Dr_Stertor 20.03.2017 18:00 # −110
bayan 20.03.2017 18:00 # −7
pdro24 21.03.2017 19:51 # −8
0_14sun 20.03.2017 18:00 # −7
pdro4 21.03.2017 19:45 # −7
1_14sun 20.03.2017 18:00 # −6
pdro5 21.03.2017 19:45 # −7
2_14sun 20.03.2017 18:00 # −8
pdro20 21.03.2017 19:50 # −7
3_14sun 20.03.2017 18:00 # −7
pdro16 21.03.2017 19:49 # −6
inkanus-gray 21.03.2017 00:09 # +9
Commando 21.03.2017 18:01 # −21
pdro10 21.03.2017 19:46 # −8
pdro19 21.03.2017 19:49 # −8
pdro38 21.03.2017 19:55 # −7
pdro39 21.03.2017 19:55 # −7
Commando 21.03.2017 18:02 # −21
pdro26 21.03.2017 19:51 # −8
ASD_77 21.03.2017 19:33 # +6
gabop 21.03.2017 19:38 # −8
pdro18 21.03.2017 19:49 # −8
1024-- 21.03.2017 19:40 # +7
Так есть шанс, что Вашему собеседнику пришлют уведомление, и он вернётся в беседу.
gabop 21.03.2017 19:44 # −7
1024-- 21.03.2017 19:50 # −7
Есть.
pdro31 21.03.2017 19:53 # −7
pdro40 21.03.2017 19:55 # −7
pdro11 21.03.2017 19:47 # −7
pdro27 21.03.2017 19:52 # −7
pdro2 21.03.2017 19:44 # −7
pdro14 21.03.2017 19:48 # −8
ivanvirabyan 22.03.2017 17:36 # +6
ivanryabinin 22.03.2017 17:42 # −7
1024-- 22.03.2017 17:58 # +9
barop 24.03.2017 14:34 # −14
inhoguest 24.03.2017 22:37 # −9