我试图在 Oracle JVM 中执行一些 java 代码,但得到 java.lang.OutOfMemoryError。
所以我想为 Oracle JVM 分配更多内存。我们应该怎么做?
提前致谢。
我试图在 Oracle JVM 中执行一些 java 代码,但得到 java.lang.OutOfMemoryError。
所以我想为 Oracle JVM 分配更多内存。我们应该怎么做?
提前致谢。
似乎您超出了 OJVM 的堆大小。
首先,您需要了解您现在总共有多少可用的堆大小:看看您的初始化参数JAVA_POOL_SIZE
。如果为 0,那么您正在使用自动内存管理(10g 或 11g)并且堆大小由 Oracle 服务器“自动”确定。然后可以以sga_target
(10g)或memory_target
(11g)为上限。
每个会话的最大堆大小受参数限制java_max_sessionspace_size
(值 0 表示默认为 4GB)。
有了这两个值,取较小的一个并检查由代码引起的内存需求/堆大小是否应该适合这个内存量。
java_pool_size
, sga_target
/memory_target
或
java_max_sessionspace_size
.请参阅http://docs.oracle.com/cd/B28359_01/java.111/b31225/chnine.htm#BABGFDAE(Java内存使用)和http://docs.oracle.com/cd/B28359_01/server.111/ b28320/initparams099.htm#REFRN10074 + http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams100.htm#REFRN10075(参数)获取详细文档。
关于您在主题中的问题“如何查看分配给 Oracle JVM 的内存”:
select * from v$sgastat where pool = 'java pool';
您可以使用http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html,特别是 -XX:MaxHeapFreeRatio 和 -XX:MinHeapFreeRatio
上述建议对我不起作用。您可以使用
select getMaxMemorySize() from dual
显示这一点。然后,您可以使用以下方法进行设置:
create or replace function setMaxMemorySize(num number) return number
is language java name
'oracle.aurora.vm.OracleRuntime.setMaxMemorySize(long) returns long';
然后调用这个函数:
select setMaxMemorySize(1024*1024*1024) from dual;
注意:这仅设置会话的最大内存。您需要为每个新会话调用它。