小编Bas*_*ien的帖子

Java和C/C++之间进程间通信的最快(低延迟)方法

我有一个Java应用程序,通过TCP套接字连接到用C/C++开发的"服务器".

app和server都运行在同一台机器上,一个Solaris机箱(但我们最终考虑迁移到Linux).交换的数据类型是简单的消息(登录,登录ACK,然后客户端要求的东西,服务器回复).每条消息长约300字节.

目前我们正在使用套接字,一切正常,但我正在寻找一种更快的方式来交换数据(更低的延迟),使用IPC方法.

我一直在研究网络,并提出了以下技术的参考:

  • 共享内存
  • 管道
  • 队列
  • 以及所谓的DMA(直接内存访问)

但我无法找到他们各自的性能适当的分析,无论是如何实现它们在Java和C/C++(这样他们可以互相交谈),也许除了管我能想象该怎么办.

在这种情况下,任何人都可以评论每种方法的表现和可行性吗?任何有用的实现信息的指针/链接?


编辑/更新

按照我在这里的评论和答案,我发现了有关Unix域套接字的信息,它似乎是通过管道构建的,并且可以节省整个TCP堆栈.它是特定于平台的,因此我计划使用JNI或者judsjunixsocket进行测试.

接下来可能的步骤是直接实现管道,然后共享内存,虽然我已被警告过额外的复杂程度......


谢谢你的帮助

c++ java performance latency ipc

99
推荐指数
6
解决办法
6万
查看次数

使用Java 9+的HiDPI支持,使用Windows L&F的JTable网格线的scalling问题 - 但不是Nimbus

我正在将我的Swing应用程序迁移到Java 11以利用HiDPI显示支持.我正在使用三星显示器,分辨率设置为3840x2160,缩放率为125%,使用Windows 10.

虽然java 9及以上版本被宣传为正确处理HiDPI缩放,但在显示简单的JTable时,网格线显示不同的厚度,如下所示:

JTable网格线问题

这是以下代码:

import javax.swing.*;

public class TestTable {
    public static void main(String[] args) {
        new TestTable();
    }

    public TestTable() {
        JTable table = new JTable(12,6);

        JDialog dialog = new JDialog();
        JScrollPane sp = new JScrollPane(table);

        table.setShowGrid(true);
        table.setRowHeight(25);

        dialog.setContentPane(sp);
        dialog.setSize(300,300);
        dialog.setVisible(true);
        dialog.setLocationRelativeTo(null);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在设置Nimbus L&F时,问题就会消失:

JTable Nimbus

import javax.swing.*;

public class TestTable {
    public static void main(String[] args) {
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

java look-and-feel nimbus hidpi

5
推荐指数
1
解决办法
257
查看次数

java GUI几秒钟没有响应

我们有一个java客户端/服务器应用程序,其GUI定期(每半小时)平均2到10秒无响应.点击不同的按钮只会在几秒钟的挂起时间后生效.

我首先想到有一个GC问题,但调查证明这方面没有任何问题.

我更确信这是一个线程问题,图形线程在某些时刻会被阻塞.

如何检查图形线程的状态以查看我的日志中的"无响应"?我想我可以从一个不同的线程每隔一秒左右检查它的状态,但是怎么做呢?要轮询哪个变量?

关于如何解决这个问题的任何其他想法?

谢谢

java user-interface multithreading thread-safety

2
推荐指数
1
解决办法
213
查看次数