java实时_Java实时性能

我正在使用

Java项目,需要非常高级的图像操作.事实上,我正在使用OpenCV进行大部分操作,我正在使用JNI来包装我需要的OpenCV函数.我对OpenCV的表现非常满意,编写OpenCV代码的人们对代码的值得信赖.与我使用Java开发人员编写的代码形成鲜明对比.

我开始乐观选择我的编程语言,我的第一个工作重复的项目工作正常,但其性能无法实时(每2秒约1帧).我做了一些优化的MY代码和它帮了很多我已经能够将帧速率推高到每秒10-20帧,这是非常好的,但是我发现,要做任何进一步的优化,我必须重写Java代码来做同样的事情,但10 -20倍更高效.

我对Java的开发人员非常关注性能感到震惊,特别是在为Media相关课程编写课程时.我下载了OpenJDK,我正在探索我使用的功能.例如,在Raster类下有一个名为getPixels(…)的函数,并获取图像的像素.我期待这个功能在源代码中是一个高度优化的功能,多次调用System.arrayCopy来进一步优化性能.相反,我发现是非常“Classy”代码,他们正在调用5-6个不同的类和10-20个不同的方法,只是为了完成我可以做的一行:

for (int i =0; i < n; i++) {

long p = rawFrame[i];

p = (p << 32) >>> 32;

byte red = (byte) ((p >> 16) & 0xff);

byte green = (byte) ((p >> 8) & 0xff);

byte blue = (byte) ((p) & 0xff);

byte val = (byte)(0.212671f * red + 0.715160f * green + 0.072169f * blue);

data[i] = val;

grayFrameData[i] = (val & 0x80) + (val & (0x7f));

}

上面的代码将图像转换为灰度,并获取浮动像素数据,大约为1-10ms.如果我想用Java内置函数做同样的事情,那么转换为灰度本身就需要200-300ms,然后抓取浮点像素大约需要50-100ms.这是不可接受的实时性能.要注意加快速度,我大量使用按位运算符,哪些Java开发人员害怕远离.

我明白,他们需要处理一般情况,但即使如此,他们至少不能提供优化选项,或至少提供一个警告这个代码可能执行的速度.

我的问题是,在这个发展的这个晚点(我已经有了我的第一次迭代,不是我在第二次执行更多的实时工作),我应该咬住子弹,并切换到C/C++,我可以罚款或者我应该坚持使用Java,希望事情变得更加实时,这样我就不必重新编写已经实现的Java代码来加快速度.

我真的开始厌恶如何“优雅”和慢Java真的是.那里的课堂数量似乎过高.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值