我有c ++程序,它反过来调用JAVA函数(调用一些API来获取结果)。 java调用的API为服务器请求创建大量内存(每1000000个请求1 GB内存)。
我们可以从c / c ++程序中释放内存吗?或指示JVM释放内存?如果你可以提供帮助,那将是很有帮助的。
提前致谢...
由于 Sambasiva。
答案 0 :(得分:0)
制作显式方法,释放C ++程序中的所有资源
并尝试使用java类中的代码。
/******************************************************************************/
/* File : NativeCodeHandle.java */
/* Description : Blog-posting or Educational purpose */
/* Written : 2010.07.11 */
/* Version : -_+ */
/* Author : a.k.a LaZy Developer */
/* Contacts : chriskr7@gmail.com */
/******************************************************************************/
class someNativeClass{
public native void allocateSomeMemory();
public native void freeSomeMemory();
static
{
System.loadLibrary("someSoDLLFile");
}
}
public class NativeCodeHandle {
boolean isCleaned = false;
someNativeClass nativeObject = new someNativeClass();
public synchronized void allocate(){
nativeObject.allocateSomeMemory();
}
public synchronized void cleanup(){
if(isCleaned) return;
// free native code - maybe JNI free() wrapper method
nativeObject.freeSomeMemory();
// maybe close DB connection
}
public void finalize(){
cleanup();
try {
super.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
NativeCodeHandle test = new NativeCodeHandle();
test.allocate();
// Explicit clean up!!! :P
test.cleanup();
}
}
答案 1 :(得分:0)
除非您可以修改第三方java类,否则无法做任何事情。
如果多次调用第三方java类,也存在很多风险
如果您强制从c ++中释放资源。