Подтвердить что ты не робот

Clojure закрытия и GC

Насколько я понимаю, используемый ClassLoader по умолчанию, используемый в Java (и, следовательно, Clojure), содержит указатели на любые созданные анонимные классы и, следовательно, на лямбда и закрытие. Это никогда сбор мусора и поэтому представляют собой "утечку памяти". Проводятся некоторые исследования для Java 7 или 8 ( https://blogs.oracle.com/jrose/entry/anonymous_classes_in_the_vm) для добавления анонимного ClassLoader, который не сохранит ссылки на эти функции. В то же время, как люди, занимающиеся написанием многолетних приложений на языках типа Clojure и Scala, поощряют использование этих конструкций?

Есть ли вероятность, что Clojure может предоставить свой собственный анонимный ClassLoader, расширяя системный, но не удерживая созданные классы?

4b9b3361

Ответ 1

Из комментария bendin выше и информации от The Joy of Clojure, Майкла Фогуса и Криса Хаузера, в разделе "Время компиляции и время выполнения" (глава 7, раздел 7.2), Fogus и Houser объясняют, что замыкания и анонимные функции скомпилированы в байтовый код во время компиляции и каждый вызов функции более высокого порядка, возвращающей замыкание, просто возвращает новый экземпляр класса замыкания, а не новый класс, Разумеется, эти экземпляры будут собирать мусор. Поскольку существует очевидная, компиляция, верхняя граница числа анонимных функций и закрытий, память будет редко, если вообще когда-либо, быть проблемой.

Мои заботы были необоснованными.