我正在用Eclipse用Java編寫一個小應用程序,以便像使用鼠標一樣使用我的Leap Motion設備。當從Eclipse運行時,一切都在工作,速度快,響應迅速,而不是凍結,崩潰或其他。我將Java應用程序導出到一個Runnable,我運行它JARjavaw -jar LeapMotionController.jar一切都很慢,在XML中讀取和寫入配置,建立與本地Web套接字服務的連接。該應用程序有3個類,飛躍運動系統托盤和設置LeapMotion 類是主應用程序,從此我啟動 Systray 類,并在啟動用于初始化連接的 run 命令后。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(); } }}在讀取安裝變量的 XML 文件后 1 秒后顯示系統。文檔加載在變量中以供重用(限制直接文件的讀?。?。5-10秒后,我收到websocket的第一個答案,握手,其中包含有關設備版本的信息。之后,所有消息都排隊并做一個大緩沖區,我試了兩個值(10和1024),一次是幫忙,之后是走得非常非常慢。在任務管理器中,我使用120MB的內存(32GB),cpu永遠不會超過1.5%(我有8個內核,16個線程在3.2GHz)。javaw 進程使用 50-60 個線程。我還為掉落活動添加了限制。使用增量,當達到該值時,處理消息,并將增量重置為 0。你需要了解Leap Motion Web Socket;- 平均每秒110條消息,我無法控制數量 - 不需要發送消息即可獲得回復 - 僅以JSon格式輸出我已經測試和搜索了;- 如何優化Java(找不到真正的幫助) - 使用WebSocket的另一種方式,其他需要消息來獲取回復(聊天) - 使用電梯.exe(谷歌它)使Java在管理員中正確,不進行更改 - 手動增加進程優先級(小上面,和實時),它不做任何更改 - 沒有找到有關緩沖區的信息, 并且代碼是在 https://dzone.com/articles/sample-java-web-socket-client 上找到的代碼(代碼的第二部分)如果我錯過了信息或想要更多詳細信息,請給我留言。我希望提高性能。使用設備接收的消息和數據量,我可以支持隊列丟棄或類似的解決方案。
1 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
好的,我終于找到了問題,這就是Java運行時。
從Java 1.8開始,包含了更多的安全性。這會導致許多問題;文件讀/寫和 tcp 連接。許多用戶報告的緩慢速度是1.7的4到10倍。
我已經使用Java 1.7安裝并運行了我的應用程序,工作速度非常快,沒有任何錯誤。
對于我的項目,我將Java 1.7與.jar打包,以使用正確的Java版本發布它。
更新不是更好:P
添加回答
舉報
0/150
提交
取消