Java->;C++;通过JNI使用SWIG进行通信。防止C++;错误和内存泄漏 我们愿意与另一个java开发团队开发的C++库通信。
我们看到的最自然、最优化的方法是使用JNI,但在开发过程中使用SWIG是为了简单 事实上,我们已经开发出了原型,并且运行良好。在使用SWIG控制器进行第一次Java->C++通信之后,还有一次C++->Java通信 <> P>我们看到的主要问题是暴露在C++库中可能出现的错误,例如内存损坏和内存泄漏。 似乎没有办法有效地防止这些错误。例如,在C++中执行中止(模拟一些不正确的内存操作)将杀死JVM 我们认为的解决方案是从父JVM中启动几个java进程,这些进程将在JBoss中运行,这正是我们愿意保护的 启动java进程很困难,基本上是因为首先需要启动JVM 在本例中,我们认为的解决方案是使用多个钉枪服务器。每一个都将加载一个JVM ad,它将(在类路径中)访问我们想要启动的程序 每个Nailgun服务器中的每个JVM(关系为1-1)都能够在同一个JVM中并发运行程序的多个执行。如果出现错误,则所有 这个钉枪JVM中的执行将崩溃(但JBossJVM将处于活动状态)。因此,我们计划使用几个执行次数有限的钉枪服务器 并使用某种负载平衡将执行分派到任何服务器。此外,Nailgun服务器将定期重新启动,以防止 内存泄漏Java->;C++;通过JNI使用SWIG进行通信。防止C++;错误和内存泄漏 我们愿意与另一个java开发团队开发的C++库通信。,java,c++,jboss,java-native-interface,nailgun,Java,C++,Jboss,Java Native Interface,Nailgun,我们看到的最自然、最优化的方法是使用JNI,但在开发过程中使用SWIG是为了简单 事实上,我们已经开发出了原型,并且运行良好。在使用SWIG控制器进行第一次Java->C++通信之后,还有一次C++->Java通信 P>我们看到的主要问题是暴露在C++库中可能出现的错误,例如内存损坏和内存泄漏。 似乎没有办法有效地防止这些错误。例如,在C++中执行中止(模拟一些不正确的内存操作)将杀死JVM 我们认为的解决方案是从父JVM中启动几个java进程,这些进程将在JBoss中运行,这正是我们愿意保
我们认为这是一个保护C++崩溃的好方法。 然而,我们想问社区是否有更好的方法
我忘了提到,我们正在考虑的另一个解决方案是,出于故障转移的原因,在我们的war中使用集群JBoss。然后,可能会合并NILA枪服务器,而不是依赖于C++程序的可靠性。纯JBoss集群应用程序(没有钉枪进程)的好处是,我们不需要任何类型的进程间通信,整个操作将在带有线程的进程中执行。有时保护Java进程免受第三方本机代码风险的最简单方法是在单独的进程中运行风险代码
但是,这可能需要进程间通信,这会增加成本和复杂性。我最喜欢集群方法,它可以保护您免受Java崩溃的影响(即使使用纯Java,JVM也会崩溃。无限循环或所有内存消耗错误也会使JVM停滞),并且可以使用您的SWIG解决方案 另一方面,如果您担心崩溃,那么也应该担心内存损坏会改变您的业务数据