2012-10-06 3 views
1

Мои вопросы тесно связаны с Java-Native-Code-Background:Поведать JVM, сколько родной памяти используется

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

Таким образом, можно как-то указать или зарегистрировать объем встроенной памяти, используемой для того, чтобы сообщить JVM, что он должен запускать GC? Если я правильно понял, то Dalvik does this, но было бы неплохо иметь надежный способ сделать это на всех JVM.

Спасибо!

+0

Нет, у вас есть только -X-аргументы под вашим контролем. Вы не можете запустить GC в Sun JVM. – duffymo

ответ

2

Вы не можете указать JVM, сколько встроенной памяти используется, JVM просто не имеет для этого интерфейса. Но если вы просто не хотите запустить из памяти, потому что JVM не заметил, сколько вы использовали, я могу думать о двух способов:

  1. сила работает GC с java.lang.System.gc() всякий раз, когда вы думаете, что JVM должна сделать , Smarter people than me are suggesting it. Не забывайте, что GC сказывается на производительности JVM.
  2. выделить один большой прямой буфер достаточно для максимального использования вашего приложения, сделать его постоянным и сделать на нем собственное управление памятью. This is suggested by the NIO doc itself, на основании более высокой стоимости/прямого расхода прямого буфера. Повторное использование. Прочитайте и напишите свои частичные байтовые буферы в смещениях большого буфера.
Смежные вопросы