在这个应用程序中通过JNI实现C ++代码是否值得?

时间:2011-07-05 00:55:09

标签: java c++ java-native-interface

我正在开发一个服务器应用程序,并希望通过在C ++中实现网络代码来利用C ++提供的灵活性和(可能的)速度提升。但是,基本应用程序必须用Java编写。

我知道实现JNI代码可能对JVM产生的可靠性和调试影响。所以我想知道,是否值得在C ++中实现这样的行为,或者开销是否会导致它不值得呢?

限制:完全用C ++编写应用程序不是一种选择。

编辑:我是熟练的(不是很好,但我可以解决大多数任务)C ++程序员,我打算使用一个库,你有什么建议吗?

主要标准:

  1. 速度
  2. 提高抽象级别
  3. 事件已发送
  4. 异步(我将在调用C ++函数之前用Java同步代码)
  5. 支持/是多线程的)

3 个答案:

答案 0 :(得分:3)

不,由于你提到的原因(与开销相关)并且没有进入任何关于性能的c ++ / java战争,它不值得它,它不会有足够的(性能)来影响客户端的吞吐量/ server类型的调用。

在大多数客户端/服务器类型的应用程序中,网络本身的数据移动和应用程序级别处理将构成您绝大部分时间。基本上,在服务器网络层花费的时间量将占性能优势不足以产生差异的总时间的一小部分。

在您的特定情况下,这种平衡是否成立,我不能说因为我不知道您的申请的性质,但我会说这是典型的案例。

答案 1 :(得分:1)

如果应用程序是IO /绑定的,那么优化CPU负载不太可能产生显着差异。 JNI本身也有管理费用。

答案 2 :(得分:-2)

我很确定用C ++而不是Java编写像网络代码那样复杂的东西将非常耗时,除非你能够访问已经熟练的C ++程序员。如果这是你不了解C ++但听说速度更快的事情,你最好把所有内容保存在Java中并专注于你的实现。

性能方面的C ++应该“更快”,假设您以一种理智的方式实现任何C ++模块。你会注意到“更快”是引用 - 我不相信它可能会产生很大的不同。