Я пишу небольшое приложение на Java с Eclipse для использования моего устройства Leap Motion как мыши. Все работает, когда запускается из Eclipse, работает быстро, быстро реагирует и не зависает, не падает, или другие.
Я экспортирую приложение Java в Runnable JAR
, я запускаю его с javaw -jar LeapMotionController.jar
Все медленно, чтение и запись в XML для конфигураций, установление соединения с локальной службой сокетов.
Приложение имеет 3 класса,
- LeapMotion
- SysTray
- и Настройки
Основным приложением является класс LeapMotion, с этого я запускаю класс Systray и после запуска команды запуска для инициализации соединения.
SysTray.chgIcon("warn");
container = ContainerProvider.getWebSocketContainer();
container.setDefaultMaxBinaryMessageBufferSize(1024);
container.setDefaultMaxTextMessageBufferSize(1024);
session=container.connectToServer(LeapMotion.class, URI.create("ws://localhost:6437/v7.json"));
session.setMaxBinaryMessageBufferSize(1024);
session.setMaxTextMessageBufferSize(1024);
wait4TerminateSignal();
Сигнал wait4TerminateSignal,
private static void wait4TerminateSignal() {
synchronized(waitLock) {
try {
for (;;) {
waitLock.wait();
if(session==null) {
waitLock.notify();
break;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Systray отображается через 1 секунду после чтения XML-файла для переменных установки. Документ загружается в переменную для повторного использования (ограничить чтение прямого файла).
Через 5-10 секунд я получаю первый ответ от websocket, рукопожатие с информацией о версии устройства ....
После того, как все сообщения поставлены в очередь и создают большой буфер, я перепробовал два значения (10 и 1024), один раз помог, после того, как прошло очень-очень медленно.
В диспетчере задач я использую 120 МБ памяти (32 ГБ), процессор никогда не превышает 1,5% (у меня 8 ядер, 16 потоков с тактовой частотой 3,2 ГГц). В процессе javaw используется 50-60 потоков.
Я также добавил лимит для активности отбрасывания. Используется инкремент и, когда достигается значение, обрабатывается сообщение, и инкремент сбрасывается до 0.
Вам необходимо знать о веб-сокете Leap Motion;
- Сделать в среднем 110 сообщений в секунду, я не могу контролировать количество
- Не нужно отправлять сообщение, чтобы получить ответ
- Выводится только в формате JSon
Я проверял и искал около;
- Как оптимизировать Java (не найти реальной помощи)
- Еще один способ использования WebSocket, другим нужно сообщение для получения ответа (чат)
- используйте Elevator.exe (Google google), чтобы сделать Java в праве администратора, а не вносить изменения
- Вручную увеличить приоритет процесса (чуть выше, и в режиме реального времени), без изменений
- Не нашли информацию о буфере, а код найден в https://dzone.com/articles/sample-java-web-socket-client (вторая часть кода)
Если у меня пропущена информация или требуется более подробная информация, оставьте мне комментарий.
Я хочу повысить производительность. С количеством сообщений и данных, которые я получаю от устройства, я могу поддержать удаление очереди или подобное решение.
Заранее благодарю за помощь.
(извините за мой плохой английский)