никогда такого не было, и вот опять... |
Sep. 11th, 2022|03:23 am |
впилил в редактор встроеный просмотрщик манов. парзятся они скриптами, конечно. пнул на тест ман по gcc, редактор выжрал всю память и не смог отформатить даже треть текста.
долго чесал репу, понял забавное: скриптодвижок учитывает только объекты, которые выделил в своих пулах. а содержимое строк хранит отдельно, например. поэтому пулы у него не очень заняты, зато вся память засрана копиями строк — которые можно и нужно собрать, но движок об этом не знает.
привинтил уведомления для гц о том, что дохуя чот памяти мимо него выделено, пора всё чистить. ман распарзило, но четырнадцать секунд. фи.
подумал-подумал — и вообще весь гц переписал: стал быстрее, и даже чуть меньше памяти на себя жрёт. заодно переписал немного парзер. в итоге выжирает дополнительно 32 мб (это лимит, после которого приходит гц и убирает всё говно), тот же ман парзится за ~260 мсек.
кстати, FlightGear простеньким скриптом тоже можно заставить выжрать всю память и потом адово наглючить (потому что я за основу взял движок скриптов оттуда).
вообще, я в движке сделал овердохуя улучшений и изменений, включая оптимизатор байткода (оно не зря выросло с 300 кб до 700), но увы: обратно во флайтгир оно не влезет. потому что и апи немного другой, и — что хуже — синтаксис скриптов. а у них там охулиард всего наскриптовано. может когда-нибудь попробую хотя бы самое вкусное им сбэкпортить.
вообще, надо бы GC ещё допилить: во-первых, скриптодвижок мультипотоковый (хоть я это и не использую), но на каждое выделение объекта хватает глобальный лок. надо бы сделать не глобальный набор пулов, а каждому потоку свой. и во-вторых, GC переделать из stop-the-world в инкрементальный. лично мне оно не особо надо, но флайтгиру очень поможет. |
|