小编Goo*_*gie的帖子

JDK 11 与 JDK 13 的性能

更新

在整个评论中,结果证明我采用的基准测试方法是不正确的,因此结果具有误导性。在纠正我的方法后(如接受的答案),结果正如人们所期望的 - JDK 13 的性能与 JDK 11 一样好。有关更多详细信息,请参阅答案。

原始问题

我在 Windows 10 下对 HashSet 进行了一些性能基准测试,使用以下 JMH 测试代码:

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@Fork(value = 1, warmups = 1)
public void init() {
    HashSet<String> s = new HashSet<>();
    for (int i = 0; i < 1000000; i++) {
        s.add(Math.random() + "");
    }
    s.size();
}
Run Code Online (Sandbox Code Playgroud)

我在不同的 JDK 版本下编译并运行它,这是我得到的结果:

在此处输入图片说明

我也用不同的堆大小对其进行了测试(因此每个 JDK 有 3 种不同的颜色)。JDK 14 当然是今天的预发布快照——只是为了看看 ZGC 在 Windows 下的表现。

我想知道 - JDK 11 之后发生了什么?(注意,对于 JDK 12,它已经开始增长,即使它没有出现在上面的图表中)

java garbage-collection jvm java-11 java-13

6
推荐指数
1
解决办法
3011
查看次数

如何使用 Qt 阻止 tcp 套接字?

我与QTcpSocket. 我需要对套接字的任何写/读调用同步(阻塞)。

我知道有waitForReadyRead()waitForBytesWritten(),但是这两种方法在 Qt 文档中被标记,因为它们在 Windows 下可能会随机失败。我受不了这个。

阻塞读取是最重要的(因为读取总是在向另一个对等方写入命令之后进行,所以我知道如果数据到达另一个对等方,它会回答)。

我尝试了 2 种方法。

第一的:

QByteArray readBytes(qint64 count)
{
    int sleepIterations = 0;
    QByteArray resultBytes;
    while (resultBytes.size() < count && sleepIterations < 100)
    {
        if (socket->bytesAvailable() == 0)
        {
            sleepIterations++;
            QThread::msleep(100);
            QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
            continue;
        }

        resultBytes += socket->read(qMin(count, socket->bytesAvailable()));
    }
    return resultBytes;
}
Run Code Online (Sandbox Code Playgroud)

这应该等待字节可用于在套接字上读取,同时处理事件循环,因此套接字正在执行必要的内部操作。

不幸的是 - 由于我不知道的原因 -bytesAvailable()有时会返回正确的字节数,但有时它永远不会返回大于 0 的任何内容。

我知道实际上有数据要读取,因为它曾经使用第二种方法(但它有自己的问题)。

第二:

我有一种信号“阻塞器”,它阻塞当前上下文并处理事件循环,直到发出某些信号。这是“拦截器”:

信号等待.h:

class SignalWait : public QObject
{
        Q_OBJECT

    public:
        SignalWait(QObject *object, const char …
Run Code Online (Sandbox Code Playgroud)

c++ sockets qt

4
推荐指数
1
解决办法
4761
查看次数

类不包括在aar中

我正在使用Android Studio 1.0.1.

我设法在项目中配置Android库模块,因此它内置于AAR中.

我的问题是AAR档案里面没有我的班级.当我检查时,MyProject/MyModule/build/intermediates/classes/debug/my/package/mymodule我可以看到我的课程编译:MyClass.class

但是当我进入AAR(或解压缩它)时,同一个目录(我的意思是my/package/mymoduleclasses.jarAAR文件里面)只包含一个文件:BuildConfig.class

为什么我的班级不包含在AAR中?

java android gradle android-studio aar

3
推荐指数
1
解决办法
2696
查看次数

标签 统计

java ×2

aar ×1

android ×1

android-studio ×1

c++ ×1

garbage-collection ×1

gradle ×1

java-11 ×1

java-13 ×1

jvm ×1

qt ×1

sockets ×1