Вы не будете в состоянии избежать соединений и все еще быть несколько нормализованными.
Мой подход должен иметь Таблицу Тега.
TagId (PK)| TagName (Indexed)
Затем у Вас есть столбец TagXREFID в Вашей таблице объектов.
столбцом This TagXREFID является FK к 3-й таблице, я назову его TagXREF:
TagXrefID | ItemID | TagId
Так, для получения всех тегов для объекта было бы что-то как:
SELECT Tags.TagId,Tags.TagName
FROM Tags,TagXref
WHERE TagXref.TagId = Tags.TagId
AND TagXref.ItemID = @ItemID
И получить все объекты для тега, я использовал бы что-то вроде этого:
SELECT * FROM Items, TagXref
WHERE TagXref.TagId IN
( SELECT Tags.TagId FROM Tags
WHERE Tags.TagName = @TagName; )
AND Items.ItemId = TagXref.ItemId;
К И набор тегов вместе, Вы были бы для изменения вышеупомянутого оператора немного для добавления И Теги. TagName = @TagName1 И Теги. TagName = @TagName2 и т.д.... и динамично создают запрос.
Я подозреваю, что где-то в вашем приложении есть ссылка на экземпляр (ы) ByteBuffer, и это предотвращает его сборку мусора.
Буферная память для прямого ByteBuffer - это выделяется за пределами нормальной кучи (чтобы сборщик мусора не перемещал его !!). Однако API-интерфейс ByteBuffer не предоставляет метода явного удаления / освобождения буфера. Поэтому я предполагаю, что сборщик мусора сделает это ... как только определит, что объект ByteBuffer больше не используется.
API ByteBuffer не предоставляет метода явного удаления / освобождения буфера. Поэтому я предполагаю, что сборщик мусора сделает это ... как только определит, что объект ByteBuffer больше не используется. API ByteBuffer не предоставляет метода явного удаления / освобождения буфера. Поэтому я предполагаю, что сборщик мусора сделает это ... как только определит, что объект ByteBuffer больше не используется.Выделенная память реализуется через встроенную библиотеку. Эта память будет освобождена при вызове метода ByteBuffer # finalize, т.е. когда Buffer gc'd. Взгляните на реализации allocate () и finalize () DirectByteBufferImpl .
buff.clear ()
не требуется, System.gc ()
будет только помогите, если, как уже упоминалось, больше не осталось ссылки на объект ByteBuffer.
В документации ByteBuffer
говорится:
Прямой байтовый буфер может быть создан путем вызова фабричного метода
allocateDirect
этого класса. Буферы, возвращаемые этим методом, обычно имеют несколько более высокую стоимость выделения и освобождения, чем непрямые буферы. Содержимое прямых буферов может находиться за пределами обычной кучи со сборкой мусора, поэтому их влияние на объем памяти приложения может быть неочевидным. Поэтому рекомендуется выделять прямые буферы в первую очередь для больших долгоживущих буферов, на которые действуют собственные операции ввода-вывода базовой системы. В общем, лучше всего выделять прямые буферы только тогда, когда они дают ощутимый выигрыш в производительности программы.
В частности,