macos - MacOS 上的 Java 7 SecureRandom 性能

标签 macos random java-7

我在 MacOSX Mavericks DP3 上运行 tomcat7 和 jdk7。 一切顺利,启动仅需 500 毫秒。 但突然间,它减慢到 35 秒。

日志消息显示 SecureRandom 是根本原因。 感谢谷歌,我发现这是一个jre错误,并通过以下代码进行验证:

import java.security.SecureRandom;
class JRand {
     public static void main(String args[]) throws Exception {
        System.out.println("Ok: " +
           SecureRandom.getInstance("SHA1PRNG").nextLong());
     }
}

是的。最简单的代码也需要 35 秒。 但似乎所有这些相关的解决方案都不适合我。 /dev/random 和/dev/urandom 都不是 Mac 上的 block 设备。

cat /dev/random | hexdump -C

输出非常快!

当切换回 jre6 时,生成随机数的速度非常快。 下载最新的jdk8-ea,问题依旧。

事实上,不仅tomcat明显变慢,Netbeans、glassfish都受到影响。 挣扎了几个小时后,我终于放弃了。

今天早上,当我来到办公室时,插上了以太网,你猜怎么着? 它恢复了!

所以我的问题是,后面会发生什么?这真的很奇怪。

谢谢。

最佳答案

哈哈,解决了。 获取InetAddress.java源码(可以从IDE拷贝); 从

修改方法 getLocalHost
String local = impl.getLocalHostName();

到:

String local = "localhost"; // impl.getLocalHostName();

重新编译,将java.net.InetAddress.class添加回JDK/jre/lib/rt.jar。

已解决。

关于macos - MacOS 上的 Java 7 SecureRandom 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17646387/

相关文章:

PHP Word 导出

sqlite - Phonegap不支持sql Rand(),该怎么办?

java - ConcurrentHashMap 怎么可能没有 keySet() 方法呢?

android - 在 Java 7/Android 上向后移植 StreamSupport

iphone - git 忽略 Mac OS X 上带空格的目录

java - 在 Mac OSX 上从 Java 启动 AppleScript 脚本

ios - 尽可能多地从应用程序包 (.app) 中获取

python - 创建随机二进制文件

c++ - 在 gmp 任意精度上生成正态分布

ant - 我应该如何维护 JDK7 项目,以便它们可以自动降级为 JDK6?