我正在用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
提交
取消