Tag: 实时

使用Java RealTime的生产者 – 消费者体系结构

我正在使用Java Realtime(Sun JRTS 2.2)设计交易系统,并且想要了解最佳实践的几个问题,因为我害怕发明轮子并且非常确定我的任务已经解决了。 所以我有线程不断读取套接字,解析字节和提取消息(二进制协议)。 之后,我应该向算法发送消息,实际上做了一些计算并决定交易与否。 所以我认为我应该设计这个系统的方法是将它分成两部分。 生产者(定期(?)实时线程从套接字中提取字节,解析它)和消费者(实时线程(周期性/偶发性?)从生产者中提取消息,与它们一起操作等)。 那么第一个问题是如何在这两个线程(生产者/消费者)之间设计高性能通信? 此外,我很想听听有关设计此类系统,建议等的现有经验的评论。 感谢您的帮助!

在Java中需要多长时间? 用Java测量延迟时间

我不想更改此代码,我只对JVM,OS或内核定制/配置感兴趣以获得最佳结果! 我有一个第二个循环(1000 x 1ms) public static void main(String[] args) throws InterruptedException { long start = System.nanoTime(); for (int i = 0; i < 1000; i++ ) { Thread.sleep(TimeUnit.MILLISECONDS.toMillis(1)); } long duration = System.nanoTime() – start; System.out.println("Loop duration " + duration / TimeUnit.MILLISECONDS.toNanos(1) + " ms."); } 在我的带有内核3.12的Fedora 20上,这个循环需要1055毫秒。 这是相当不错的结果,平均超过1100ms 。 是否可以使用自定义JVM标志或操作系统配置使此代码更快? Loop duration 1055 ms.

Java是否有现成的时钟同步解决方案?

我们有一个大型高性能软件系统,它由多个交互式Java进程(而不是EJB)组成。 每个进程可以在同一台机器上,也可以在不同的机器上。 某些事件在一个进程中生成,然后以不同的方式传播到其他进程以进行进一步处理,依此类推。 出于基准测试的目的,我们需要创建一个日志,记录每个事件何时通过“检查点”,最终将这些日志组合起来,以获得每个事件如何通过系统传播的时间线以及延迟(当然,流程切换和IPC添加延迟,这没关系。 当然,问题是时钟同步。 所以这是我的问题: 1)如果所有进程都在同一台机器上,是否保证currentTimeMilis在通话时是准确的? ITP的错误是否存在一定的约束? 2)如果某些进程可能在不同的机器上,那么是否存在用于时钟同步的现成解决方案(也是免费或开源的)? 我最好寻找可以绕过操作系统(Windows或Linux)并直接从Java工作的解决方案。 我也非常理想地寻找能够以微秒精度运行的东西。 我考虑过NTP,但我不确定它是否可以通过Java而不是通过操作系统获得,而且我不确定它的复杂性。 3)有没有办法确定在特定配置(或我最终使用的任何解决方案)中使用NTP的误差范围,以便我可以在计算延迟时给出误差范围? 谢谢!

VirtualMachine /云上的Sun Java实时系统

只是想知道是否有人可以在VMWare等虚拟机上运行/编译Sun Java Realtime系统JRE的应用程序,或者在Amazon EC2上的云上运行/编译应用程序? 我知道在虚拟化基础架构上运行Realtime java并不理想,但它使事情变得更容易。 (否则我只需要在物理硬件上安装SLES SP2。)

一个简单的规则,我何时应该使用Java NIO的直接缓冲区来进行网络I / O?

有天赋的人可以用简单直接的方式解释复杂的事情来解决这个问题吗? 要在使用Java NIO进行网络I / O时,何时使用直接ByteBuffers与常规ByteBuffers,以获得最佳性能? 例如:我应该读入堆缓冲区并从那里解析它,执行许多get()(逐字节)或者我应该将它读入直接缓冲区并从直接缓冲区解析?

为什么VisualVM Profiler中不显示所有方法?

我正在使用VisualVM来查看我的应用程序运行缓慢的位置。 但它没有显示所有方法,可能没有显示延迟应用程序的所有方法。 我有一个实时应用程序(声音处理),并有几百微秒的时间缺陷。 VisualVM是否可能隐藏自身快速的方法? 更新1 我通过采样器和猜测发现了慢速方法。 它是toString()方法,它是从调试日志中调用的,它已被关闭,但却消耗了一些时间。 Settings有所帮助,现在我知道如何看待它:它取决于Start profiling from选项Start profiling from 。

谁使用实时Java?

我注意到Real Time Java 2.2在9月份发布,似乎距离我上次查看时已经走了很长一段路。 但是,到目前为止,是否有人知道任何现实世界的用途,商​​业或学术用途? http://java.sun.com/javase/technologies/realtime/index.jsp

实时输出到jTextArea

我有一些代码,需要花费几分钟来处理,它必须连接到Web上的长数组中的每个字符串,每个字符串是一个url。 我希望这样做,以便每次连接时,都应该刷新jtextarea,这样用户就不会盯着看起来冻结20分钟的空白页面。 或者需要多长时间。 这是我尝试过的东西的一个例子: try { ArrayList myLinks = LinkParser.getmyLinksArray(jTextArea1.getText()); for (String s : myLinks) { jTextArea2.append(LinkChecker.checkFileStatus(s) + “\n”); } } catch (IOException ex) { JOptionPane.showMessageDialog(jTextArea1, “Parsing Error”, “Parsing Error”, JOptionPane.ERROR_MESSAGE); Logger.getLogger(MYView.class.getName()).log(Level.SEVERE, null, ex); }

是否有可能使用常规JVM创建一个高优先级线程,一个不会被任何其他线程抢占的线程?

所以我的目标很简单:我想在不使用RTSJ(实时Java VM)或其他专有JVM的情况下在Java中创建高优先级线程。 让我们假设您从未创建任何垃圾,因此GC不会成为罪魁祸首。 我们假设我有4个处理器。 它可行吗? 如果没有,是否可以计算我的线程被抢占的次数? @Gray:我希望尽可能少的延迟实时响应,而不必去RTSJ和特殊操作系统 @sarnold:你是对的。 如果您在JVM级别中实现了这一点,但操作系统不会抢占您的JVM,则在较低级别会遇到相同的问题。 让我们假设有可能破解和/或使用调整不这样做的Linux发行版。 @StephenC:我已经知道它无法完成。 这就是我想要这样做的原因。 🙂 如果我至少可以检测到抢占,我将有办法衡量我的进步。

Java中的实时图形

我有一个应用程序,每秒更新一次变量大约5至50次,我正在寻找一种实时绘制这种变化的连续XY图的方法。 虽然不建议将JFreeChart用于如此高的更新率,但许多用户仍然认为它适用于它们。 我尝试过使用这个演示并修改它以显示一个随机变量,但它似乎总是耗尽100%的CPU使用率。 即使我忽略了这一点,我也不希望被限制在JFreeChart的ui类来构造表单(虽然我不确定它的function是什么)。 是否可以将其与Java的“表单”和下拉菜单集成? (如VB中所示)否则,我有什么其他选择吗? 编辑:我是Swing的新手,所以我把一个代码放在一起只是为了测试JFreeChart的function(同时避免使用JFree的ApplicationFrame类,因为我不确定它如何适用于Swing的组合盒子和按钮)。 现在,图表正在立即更新,CPU使用率很高。 是否可以使用新的Millisecond()缓冲该值并将其更新为每秒两次? 另外,我可以在不中断JFreeChart的情况下将其他组件添加到JFrame的其余部分吗? 我该怎么办? frame.getContentPane()。add(new Button(“Click”))似乎覆盖了图形。 package graphtest; import java.util.Random; import javax.swing.JFrame; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; public class Main { static TimeSeries ts = new TimeSeries(“data”, Millisecond.class); public static void main(String[] args) throws InterruptedException { gen […]