我有一个时间关键的应用程序需要在设定的时间表上发送UDP数据报.接收端的抖动容限非常低.使用java ScheduledThreadPoolExecutor实现它是不够的,因为当GC执行"Stop the World"集合时,我的线程会在GC完成它的工作时暂停.
我想用Java实现业务逻辑,同时用C++中的POSIX线程实现时间关键部分(本机环境就是Linux).这将允许我们保存数千行用Java编写的代码,并从本机系统调用中获得所需的调步.
我的问题是:如果我调用一个创建一个单独的POSIX线程的JNI函数,当Java GC执行"停止世界"集合时,该线程是否会被"暂停"?经验丰富的JNI大师是否有任何陷阱想用这种方法指出或者建议的任何替代方法?
一如既往,感谢令人敬畏的堆栈溢出社区!
这种行为让我感到沮丧.
我键入以下内容:
fileName.append(c.get(Calendar.HOUR_OF_DAY))
现在,当我输入内容辅助加速时.我没有从内容辅助中选择HOUR_OF_DAY,也没有按Enter键自动填写.我只输入了"HOUR_OF_DAY".我也在行尾输入两个末端的"parens"),我没有按Tab键.
我的光标现在在行尾,我输入;
Eclipse插入; 光标之后!所以当我按下回车键时,分号会移动到下一行!
我已经尝试了我在偏好中可以想到的一切.我打开了"auto smeicolon"选项,该选项应该自动在行尾添加分号,但不能解决这个问题.
一个线索:如果我在键入";"之前按"ENTER" 在该行的末尾,内容辅助窗口消失了; 正好用光标正确插入; 所以内容协助让我感到烦恼.
任何帮助表示赞赏.
我正在使用Java DatagramSocket类将UDP数据报文发送到端点.数据报必须以60ms的间隔到达端点.
我发现DatagramSocket.Send通常需要> 1 ms(接近2)才能打包并发送不超过56个字节的数据包.这导致我的数据包以62 ms的间隔传送,而不是60 ms.
这是在Windows Vista机器上.以下是我测量时间的方法:
DatagramPacket d = new DatagramPacket(out, out.length, address, port);
long nanoTime = System.nanoTime();
socket.send(d);
long diff = System.nanoTime() - nanoTime;
System.out.println( out.length + " in " + diff + "ms." );
Run Code Online (Sandbox Code Playgroud)
有没有人有提示或技巧来加速这个过程?