最近在项目中,遇到一个使用JAVACV时,报物理内存过高。如果下所示:
java.lang.OutOfMemoryError: Physical memory usage is too high: physicalBytes = 1G > maxPhysicalBytes = 1G
其实是因为JAVACV使用的堆外内存,没有释放。 并不是JVM的问题。
解决办法:
方法一:
添加JVM启动参数,示例如下:
-Dorg.bytedeco.javacpp.maxbytes=0G -Dorg.bytedeco.javacpp.maxPhysicalBytes=0G
方法二:
应用启动时添加如下属性值
System.setProperty("org.bytedeco.javacpp.maxphysicalbytes", "0");
System.setProperty("org.bytedeco.javacpp.maxbytes", "0");
这两个属性是用来设置堆外内存大小的,这里我把堆外内存大小设置成0了。那么这个程序就没有堆外内存可用,只能使用JVM堆内存了。