LINUX.ORG.RU

[write in C] fast object cache for Java


0

1

Background:

представьте себе большое жавовое приложение, в которое можно загрузить данные с помощью внешнего текстового файла.

* текстовик написан на простеньком скриптовом язычке.
* После парсинга он превращается в жавовские объекты (вызовы превращаются в нечто с методом run, переменные - просто в объекты).
* Полученная солянка начинает как-то взаимодействовать друг с другом, сим изначальный скрипт и исполняется
* По результатам отработки у нас получается какой-то набор объектов, к которым можно обращаться из остальных частей приложения

Теперь, поскольку весь процесс происходит бессовестно медленно, я хочу впилить какие-нибудь оптимизации.
Первая мысль: если что-то вычислилось, то только один раз, если что-то распарсилось - то тоже только один раз.

Для того, чтобы складывать объекты языка (а они у нас превращаются в жаваклассы), нужен какой-то кэш. Можно, допустим, просто взять какой-нибудь мап, и сложить туда ссылки на объекты.

Но тут с мапом возникают проблемы. Помним, да, что скрипт превращается в жаву напрямую, почти без промежуточного кода?
Иногда получается, что к нашим сабжевым объектам уже обратился какой-то внешний, не контролируемый нами код. Перед записью в кэш даже поля нужно отчуждать.
Если у нас в скриптовом язычке есть метод или цепочка методов, которые должны храниться без привязки к конкретному контексту использования, перед сохранением нужно как-то производить и отчуждение от контекста.
Объекты могут укладываться во всякие причудливые графы, которые хорошо было бы сохранять как можно аккуратней и быстрее целиком с возможностью сохранять, отчуждать или симулировать зависимости.

Пока что можно было выплыть на объектах. Теперь, чтобы всё усложнить, есть случаи, когда памяти будет не хватать, и лишний кэш, придется скидывать в файлы. Тут уже возникают проблемы с действительно быстрой бинарной сериализацией.

В результате хотелось бы, чтобы восстановление «горячих» методов и переменных было быстрее, чем их вычисление/парсинг с нуля.

Есть ли какие-нибудь решения, которые позволяют делать действительно быстрый in-memory кэш для объектов на жаве с возможностью сериализации и десериализации в/из кусок raw data?

Я видел в интернетах кучу сериализаторов, сохраняющих во всякую гадость типа xml или properties-файлов. Мой файлик парсится зачастую быстрее, чем их мега-сериализаторы успевают проанализировать XML, так что все они не годятся =)
Также пробовал пару поделок с гитхаба для in-memory, но их in-memory работает немногим быстрее чем запрос к postgresql :) (ладно, тут слегка перегнул)

Лорчую, разброд в мыслях

★★★★☆

> на простеньком скриптовом язычке

поскольку весь процесс происходит бессовестно медленно


Только я вижу взаимоисключающие фразы? Если скриптовый язычек прост, то зачем его полностью в джава объекты превращать??... Может легче построить что-то на подобии конечных автоматов для типичных лексических конструкций?

Jetty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.