- 1
- 2
- 3
- 4
/**
* Деструктор
*/
public function __destruct(){
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+161
/**
* Деструктор
*/
public function __destruct(){
Публичная функция деструктор - пиши подробнее!
Анонимус 05.11.2014 21:21 # +3
wvxvw 05.11.2014 21:35 # +2
Анонимус 05.11.2014 21:40 # +2
вариант про си -- ок, хотя и это диковато
bormand 05.11.2014 21:43 # +2
Анонимус 05.11.2014 21:46 # +1
именно о них я и говорил.
когда придет гц совершенно непонятно.
использовать ~ в качестве подстраховки можно, но завязываться на него -- нет.
------
и фообще
By default, PHP's garbage collector is turned on. There is, however, a php.ini setting that allows you to change this: zend.enable_gc.
ха-ха-ха
WGH 05.11.2014 22:54 # +1
С другой стороны, в питоне есть конструкция with для предсказуемого управления ресурсами.
Анонимус 05.11.2014 22:57 # 0
всё лучше
bormand 05.11.2014 23:08 # 0
Анонимус 05.11.2014 23:13 # 0
Причем заметьте: финалайзер в джаве и финалайзер в .NET (в случае c# он еще алиас деструктора) в этом шабаше не участвует.
bormand 05.11.2014 23:23 # 0
P.S. Вот за это я немного недолюбливаю языки с gc - обещали автоматическое управление памятью, а на деле - все файлы и т.п. руками закрывать. И RAII, как в крестах, уже не запилишь.
Анонимус 05.11.2014 23:23 # +1
volter9 06.11.2014 00:19 # 0
Анонимус 06.11.2014 00:30 # 0
3.14159265 06.11.2014 01:41 # +1
Памятью, а не ресурсами (в т.ч. удалёнными).
В целом конечно согласен. С сахарком в виде try with resources/using вроде стало поудобнее, но чтоб автоматически почистило по выходу из скоупа — до этого еще расти и расти.
Плюс крестоподход может автоматически освобождать лочки (что в принципе опять-таки ресурс).
А в жабе/шарпе сахарок syncronized(Obj) / lock(Obj) плюс старое-доброе
Разве что через лямбды (что само по себе оверхед), как делают в linq.
3.14159265 06.11.2014 01:47 # 0
Вот сколько работаю, никогда ничего такого мудрённого типа фантомных/мягких ссылок не писал.
Кстати постоянный и любимый вопрос ревьюверов на всяких собеседованиях. Спрашивается толку-то?
Мне кажется у таких ревьюверов не хватает практики, чтоб понять что знание таких вещей особо не помогает и/или фантазии чтоб придумать действительно кошерные вопросы.
Лучше б про stop-the-world спрашивали и тюнинг VM. Это действительно проблема, и надо уметь её сглаживать.
А то у многих такое ощущение будто GC — silver bullet.
bormand 06.11.2014 06:23 # 0
Остановите землю, я сойду. Вроде бы на -server включается более вменяемый сборщик?
Кстати, а что интересного и полезного можно натюнить помимо лимитов памяти да включения хотспота?
3.14159265 06.11.2014 11:59 # +2
Ну максимальная задержка сборок (но чем меньше поставить, тем чаще они будут срабатывать), survior ratio, пропорцию выделения памяти между олдгеном и новыми поколениями.
Потом там всякие штуки типа выгрузки классов и permgenа (раньше было особенно актуально, ибо он постоянно засирался).
Еще есть compressed oops и compressed strings. Т.к. в жабе всё измеряется по 8 байт, то 32-битным указателем можно адресовать (4Г*8байт)=32 гига. В былые времена на 64-битных машинах из-за этого падал пирфоманс.
Вторая фича по возможно хранит однобайтовые ansi-строки. Меньше размеры объектов => меньше куча => быстрее собирается.
>Вроде бы на -server включается более вменяемый сборщик?
На -server включаются многие более агресивные оптимизации. Например начинают инлайниться виртуальные методы.
bormand 06.11.2014 12:53 # 0
Сейчас, ради фана и изучения NIO, набросал с использованием NIO и JCA считалку sha-256. Так она с -server всего в 1.5 раза медленней получилась, чем выдроченная сишная sha256sum...
P.S. Или в JCA криптопровайдеры нативные?
3.14159265 06.11.2014 13:26 # 0
Полагаю всё оно юзает жаба-реализации. Это ж не питон с сишными ушами.
Там политика такая - поменьше нативного. Там всё, и gzip, и прочая математика реализованы средствами языка.
bormand 06.11.2014 14:36 # 0
Ага, мне больше всего понравилось, что дрова для СУБД написаны на чистой жабе и не требуют никаких SDK, библиотек и прочего говна.
> Полагаю всё оно юзает жаба-реализации
Тогда это очень неплохой результат, имхо.
Анонимус 06.11.2014 22:36 # +2
Допустим у Вас есть либа libfoo.
Соответственно есть утилита foo и файлик foo.conf в домашней папке, и все привыкли что если в нем прописать что надо, то всё работает.
Так как пайтон, перл, пых итд всего-лишь обёртки вокруг этой либы, то если работает с консоли то работает и в них.
А вот пришла жава и срать хотела на libfoo, и пользователь рвет на жопе волосы: почему у него всё сконфигурено, но ничего не работает.
Xom94ok 05.11.2014 23:05 # 0
bormand 05.11.2014 23:09 # +2
http://effbot.org/pyfaq/how-does-python-manage-memory.htm
The standard C implementation of Python uses reference counting to detect inaccessible objects, and a separate mechanism to collect reference cycles, periodically executing a cycle detection algorithm which looks for inaccessible cycles and deletes the objects involved.
bot 06.11.2014 22:06 # +1
bormand 06.11.2014 22:20 # 0
Анонимус 05.11.2014 23:18 # +2
Понять когда на объект перестали ссылаться не всегда легко. Почитайте про Islands Of Isolation, например.
Потому чаще всего используют на выбор два подхода: или это предлагается делать программисту, или переодически считать транзитивные ссылки на все объекты в куче из стеков каждого живого потока (плюс еще место куда классы загружены).
bot 06.11.2014 09:26 # 0
bormand 06.11.2014 10:30 # 0
bot 06.11.2014 21:58 # 0