Запись / чтение пакетов, генерирующих мусор

У меня есть клиент на Android, который использует интерфейс TUN, предоставляемый Android VPNService для перехвата пакетов. В этом отношении я читаю все входящие пакеты и записываю их в интерфейс TUN. Это в основном означает, что я пишу для каждого получаемого пакета. Проблема с этим заключается в том, что, по-видимому, для каждого вызова для записи и чтения Android выделяет int [67] и int [80] соответственно, что является большим количеством мусора, что приводит к множеству повторяющихся сборок мусора.

Вот код для операции чтения, который считывает все входящие пакеты с моего сервера. Как упоминалось в комментариях, я читал с простого канала Дейтаграммы :

public void run() { ByteBuffer buffer = ByteBuffer.allocate(32767); while (!Thread.currentThread().isInterrupted()) { try { buffer.clear(); // getVpnTunnel is a simple getter for the underlying datagram channel. int packetSize = conn.getVpnTunnel().read(buffer); // int[80] garbage allocated here buffer.flip(); if (packetSize < 1) { // No data, wait then read. try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); break; } continue; } switch (...) { default: throw new IllegalStateException("Invalid Message Received"); } } catch (IOException e) { e.printStackTrace(); break; } } } 

Когда я читаю пакет / сообщение, я снимаю и проверяю заголовок собственного типа (1 байт) и записываю все соответствующие пакеты в интерфейс Android TUN.

Теперь мой вопрос: возможно ли мне уменьшить количество мусора, созданного без использования буферизованных чтений? Можно ли кэшировать исключение каким-либо образом таким образом, чтобы ему не приходилось выделять новое исключение для каждого вызова для чтения и записи? Или это просто невозможно, и я должен вместо этого изменить время ожидания Thread.sleep?

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

Надеюсь, вы можете дать мне несколько советов, спасибо заранее.

    Intereting Posts
    Найти datamessage в телефоне android до того, как приложение было установлено Вставка в несколько таблиц с помощью ContentProvider Как подключить Lenovo IdeaPad S6000 к Windows 7 (64-разрядная версия) Как получить широту и долготу мобильного устройства в Android? Разметка столбцов с помощью TableLayout Оттенок / тусклый на ощупь Загрузить изображение с URL в WebView (по вертикали) Попытка вызвать виртуальный метод 'void android.support.v4.view.ViewPager.setAdapter (android.support.v4.view.PagerAdapter)' на ссылку нулевого объекта В чем разница между представлениями и виджетами Проверка лицензии для про-ключа Прямоугольник внутри другого прямоугольника Как Starbucks показывает пользовательский интерфейс на устройствах Android в ближайшем магазине? Как показать индикатор выполнения до тех пор, пока не будет воспроизводиться видео в реальном времени Android? Анализ HTML с веб-страницы Может ли HTC рекламировать себя как BLE Beacon?