我们在这种形式的代码的地方:我有哪些选项可用于Java进程通信?
void processParam(Object param)
{
wrapperForComplexNativeObject result = jniCallWhichMayCrash(param);
processResult(result);
}
processParam - 方法被称为与许多不同的参数。
jniCallWhichMayCrash - 本地方法,旨在对参数进行一些复杂处理并创建一些复杂对象。在某些情况下它可能会崩溃。
wrapperForComplexNativeObject - 由痛饮
processResult生成的包装类型 - 用纯Java编写的方法,它处理它是由创作了几种参数(受种我没有意思班,也许有些像层次结构)的对象:
1 - 一些非唯一对象(来自同一层次结构)互相引用时,这些对象可能具有不同参数值的processParam()方法的调用创建的副本。由于保留所有重复项的成本很高,因此有必要缓存它们。
2 - 一些相互引用(来自同一层次结构)的独特对象和一些第一类对象。
在对某些集合中的每个参数执行processParam之后,会一起处理在processResult中创建的数据。问题是,事实上,jniCallWhichMayCrash方法可能会导致整个JVM崩溃,这会非常糟糕。崩溃的原因可能是它可能发生一个参数值而不发生另一个参数值。我们已经决定最好忽略JVM内部的崩溃,并在发生这种崩溃时跳过一些数据块。为了做到这一点,我们应该在单独的进程中运行processParam函数,并以某种方式将结果传递给主进程(如何?!这是一个问题),如果发生任何崩溃,我们只会丢失部分数据(没关系)而不会丢失其他所有东西。所以目前主要的问题是在不同进程之间实现传输。我有哪些选项?我可以考虑流的序列化和二进制数据的传输,但由于对象的复杂性,序列化可能不是很快。也许我有一些其他的选择来实现它?
恐怕网络服务的使用将是一个矫枉过正的问题。我也认为它不会有好的表现,XMLs不是我们的选择。 – okutane 2010-03-10 15:17:30
你能详细说明原因吗? 实现一个Web服务器接收4kb的XML块不会使您的机器爆炸,我认为...因为像dns-323和其他等效模型的home-nas支持lighttpd的使用,即使您的iPhone会考虑使用芯片忽略不计。 – Riduidel 2010-03-10 15:26:46
那么,你能想象如何设计一个编译器,其中一个模块会将一些数据(例如整个源文件或一组文件的中间表示)作为大量小XML传递给它?我认为它不会很好,我们的应用程序也是一样的。 – okutane 2010-03-11 20:00:50