在Raspberry Pi 3中使用Java的下载速度非常慢

在Raspberry Pi 3中使用Java的下载速度非常慢,java,performance,httpurlconnection,raspberry-pi3,Java,Performance,Httpurlconnection,Raspberry Pi3,我用Java编写了以下代码,用于下载Raspberry Pi 3中的文件: String fileUrl = "..."; URL urlObj = new URL(fileUrl); HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); InputStream in = con.getInputStream(); byte[] buffer = new byte[8*1024]; long t = Syste

我用Java编写了以下代码,用于下载Raspberry Pi 3中的文件:

String fileUrl = "...";
URL urlObj = new URL(fileUrl);
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
InputStream in = con.getInputStream();

byte[] buffer = new byte[8*1024];
long t = System.nanoTime();
int read;

while ((read = in.read(buffer)) != -1) {
    System.out.println("Read " + read + "B in " + (System.nanoTime() - t)/1000000.0 + " ms");
    t = System.nanoTime();
}
尽管我使用的是8 KB的缓冲区,但平均下载速度为1389 B,约205毫秒,折合为6.78 KB/s:


我还注意到,执行这段代码时CPU的使用率始终为25%。由于RPi的CPU有4个核,我估计它使用的是单核的100%。我知道这是一个很弱的处理器,但下载文件不是一项要求很高的任务,所以这种奇怪的行为让我感到困惑。

我终于解决了这个问题

我删除了OpenJDK并安装了Oracle JDK:

sudo apt-get purge openjdk-8-jdk
sudo apt-get purge openjdk-8-jre
sudo apt-get autoremove
sudo apt-get install oracle-java8-jdk
如果Oracle的JDK安装正确,那么运行
java-version
应该是这样的:

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)
这样,下载速度从5 KB/s左右提高到450 KB/s左右,这是我在4 Mbps连接中所期望的

出于好奇,我重新安装了OpenJDK,下载速度又慢了,所以正如Erich Kitzmueller和pvg所建议的,这个jdk就是问题所在


谢谢大家的建议

尝试将缓冲区大小从8k增加到256kI。我试过了。即使缓冲区大小为1MB,也没有什么区别。从rpi到curl的速度有多快?你可以试试Oracle的Java而不是OpenJava,两者都是在Raspbian中预装的。是的,这听起来像是你正在使用的jdk从根本上解决了问题。