matlab程序崩溃怎么解决,java – 如何避免MATLAB崩溃打开太多的数字?

有时我会启动一个MATLAB脚本,并且意识到太晚了,它会输出太多的数字.最终我得到了

Exception in thread “AWT-EventQueue-0” java.lang.OutOfMemoryError: Java heap space

这可以很容易地在我的机器上复制使用

for i=1:inf

figure;

end

在达到128 MB Java堆的标准设置(Preferences / Java Heap Memory)崩溃之前,我会收到大约90个数字,而把堆叠倍数增加到256 MB可以让我大概有200个数字.

你有没有办法避免Java错误信息?如果没有足够的内存用于另一个数字,我希望我的脚本被告知而不是崩溃.

也许我可以有一个图形的包装器(哪里?)检查有多少Java堆可用,哪些拒绝打开一个新的数字,如果没有足够的空间?

更新

使用下面的答案,我得到一个很好的图表,多少空闲的内存Java有:

这是使用

for i=1:inf

java.lang.Runtime.getRuntime.gc

fprintf('%3.0f: %1.0f Byte free\n',i,java.lang.Runtime.getRuntime.freeMemory);

figure;

end

我认为开始的增加意味着垃圾收集只会在我每次打电话时做出一定的努力?

更新2 – 我的解决方案

使用我在这里的帮助,我实现了以下解决方案作为一个figure.m,它重载并调用build-in图形命令:

function varargout=figure(varargin)

memcutoff = 10E6; % keep at least this amount of bytes free

memkeyboard= 3E6; % if memory drops below this, interrupt execution and go to keyboard mode

global refuse_new_figures

if refuse_new_figures

warning('jb:fig:lowjavamem2','Java WAS memory low -> refusing to create a new figure. To reset, type "global refuse_new_figures ; refuse_new_figures = [];"');

return

end

freemem=java.lang.Runtime.getRuntime.freeMemory;

if freemem < memcutoff

fprintf('Free memory is low (%1.0f Bytes) -> running garbace collector...\n',freemem);

java.lang.Runtime.getRuntime.gc

end

freemem=java.lang.Runtime.getRuntime.freeMemory;

% fprintf('Free memory is %1.0f Bytes.\n',freemem);

if freemem < memkeyboard

warning('jb:fig:lowjavamem','Java memory very low -> going into interactive mode. Good luck!');

keyboard;

end

if freemem < memcutoff

warning('jb:fig:lowjavamem','Java memory low -> refusing to create a new figure!');

refuse_new_figures=true;

else

if nargin > 0

if nargout > 0

varargout{1}=builtin('figure',varargin{:});

else

builtin('figure',varargin{:});

end

else

if nargout > 0

varargout{1}=builtin('figure');

else

builtin('figure');

end

end

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值