matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory.' J. n6 h% S; \; Y
>> feature('memstats')
, R% N$ X0 C& S. @( MPhysical Memory (RAM):
1 `0 F5 u0 k7 gIn Use: 611 MB (26364000)
. [/ ^# i0 y$ k+ q- wFree: 1428 MB (59418000)9 c& x4 r7 ]. L
Total: 2039 MB (7f77c000)
. m2 j$ X, v1 r& T( ZPage File (Swap space):$ J5 b% j/ }% p
In Use: 470 MB (1d628000)
1 j% W7 k& V6 N9 d6 `4 p7 jFree: 4481 MB (118156000)$ v* u/ Z" J$ K7 S* \2 Q8 e
Total: 4951 MB (13577e000)
V7 B/ W! x9 ~5 P& fVirtual Memory (Address Space):
' F3 e% v9 B! \$ { }In Use: 400 MB (190d3000); x$ }7 I( W' x4 h2 p" v
Free: 1647 MB (66f0d000)" O d5 t2 Y/ @. o
Total: 2047 MB (7ffe0000)5 e+ c# `6 F6 }$ a( f9 e, F% z; l
Largest Contiguous Free Blocks:4 ]; L* \- A& ~2 x R$ g
1. [at 20017000] 675 MB (2a3f9000)
* F! m$ `* s0 }- }- L- ?2. [at 4b033000] 253 MB ( fd8d000)
, M0 w. i' t' S8 V5 h# X3. [at 18010000] 127 MB ( 7ff0000)
# ^) r6 e( C- |5 O! s0 |4. [at 68ff7000] 64 MB ( 4009000)
2 r" b$ I W" a" s/ ?+ r, }- [5. [at 6d7c5000] 56 MB ( 389b000)
/ F8 i- W0 G, E- R6. [at 62c29000] 50 MB ( 3207000)
# Y7 m) P+ v' `& k7. [at d330000] 44 MB ( 2ca0000)
+ o/ [$ e& R" r8 Y% W7 }1 P8. [at 663dd000] 41 MB ( 2983000)0 V3 Y& ]: F- F5 g' J' j# k+ h
9. [at 60809000] 36 MB ( 2417000)2 A7 K* y" x, ?$ L4 n$ J" y
10. [at 5adf7000] 35 MB ( 2379000)) j/ D( o$ F, W# D
======= ==========! [4 |& U0 y1 a4 F0 ^7 c
1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats'): h& v# M/ _* Q1 @
7 [6 m! M7 X# V; _: G+ E& b
Physical Memory (RAM):2 ^( K9 q4 p3 g0 v
In Use: 1082 MB (43a3a000)# g; v* B% u e; v0 }! k2 M
Free: 1467 MB (5bb96000)
& U w( H+ ]5 yTotal: 2549 MB (9f5d0000)4 O8 \8 n: u: w4 y
Page File (Swap space):
1 K) x6 @8 t- K- I% HIn Use: 1227 MB (4cbe3000)
1 [& q0 A& I$ O) \/ ?4 d, I* OFree: 5315 MB (14c36e000)2 ?6 I9 u8 }* @: T; a3 Y2 O
Total: 6543 MB (198f51000)! {% O1 l& p& Y3 ?4 G; U' {- m" ?' m
Virtual Memory (Address Space):
+ ~" O" [ r+ @% b" d% J0 gIn Use: 501 MB (1f5bf000)4 N/ Z9 W: h& [1 z
Free: 2570 MB (a0a21000)" R% H% I. R" K
Total: 3071 MB (bffe0000)
+ x- ~; g- D( ]1 V. _! q( \' fLargest Contiguous Free Blocks:7 o5 R( G! I) p% X8 d/ p
1. [at 1b010000] 1074 MB (432d0000)
) ]$ c* R& }* R- \2. [at 7fff0000] 1023 MB (3ff9c000)/ o% ?% Q8 S% D* I0 ?# x9 R
3. [at 5e302000] 227 MB ( e32e000)
7 I! H! {$ `& ]% ^4. [at 7c41b000] 50 MB ( 32d5000)& }; o: M$ b% |% [/ E" E2 y
5. [at 6d857000] 30 MB ( 1e09000)
- `- `; s9 M$ b( C" i0 j) Z- G7 n6. [at 6f66b000] 21 MB ( 1595000) I! Y, e0 _; B& h
7. [at 715c3000] 20 MB ( 149d000)
+ v g) y9 f1 W8 E6 b) x" C( d f8. [at 7a038000] 18 MB ( 12f8000)
% s: f7 c( A/ o0 ^9 i G9. [at 739a6000] 17 MB ( 114a000)
8 z% Q% c" q* y3 S3 ~9 [; V10. [at 70c41000] 9 MB ( 94f000)
" ?6 t- M) b8 ], ~======= ==========
/ h( c' r ?. E7 z2494 MB (9be3b000)
2. 采用PACK: 试了不管用
7 t$ o0 H* G* T: C$ X! r! U
3. 条件允许的话采用64位系统:32位免谈
7 D3 z. `6 A9 s
4. 采用3GB switch: 由于32位 Windows 操作系统的限制,每个进程只能使用最多 2GB 的虚拟内存地址空间,因此 Matlab 的可分配内存也受到相应的限制。Matlab 7.0.1 引进了新的内存管理机制,可以利用 Windows 的 3GB 开关,使用 3GB 开关启动的 Windows 每个进程可以在多分配 1 GB 的虚拟地址空间。我的笔记本是vista系统,台式机是XP系统。
1)对vista系统:Bcdedit 位于X:\Windows\system32\ "X:"为安装Vista的盘符,利用Bcdedit命令,可以自定义你的Vista启动管理项。使用命令: BCDEdit /set increaseuserva 3072 ,DOS界面显示操作成功,注意虚拟内存应设成大于3G,否则内存分配<3G。可在matlab里使用 system_dependent memstats或feature('memstats')命令查询。
2)对XP:右键单击我的电脑--->>属性--->>高级--->>启动和故障修复--->>设置--->>编辑--->>将最后一行multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" 复制,在下一行粘贴,并将粘贴一行改为: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional with 3GB switche" /3gb --->>存储--->>确定--->>重新启动计算机--->>在显示选择操作系统时,选择带有 3GB switche的一项--->>打开matlab。可是我设置完重启计算机,选择3GB switche的一项时,显示lsass.exe 应用程序错误,无法登陆!看来我的XP系统不支持3GB switche模式登录,因此matlab的可用虚拟内存不会超过2G。
8 j8 t* \/ Z) [/ O( O+ k$ [
5. 优化程序,减少变量
% Z+ {, G0 `) U8 `' f6 P2 C6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
$ v: r7 d$ i. @6 Z$ V% w
7. 关闭Matlab Server
; `+ t% C* ?+ ]% n; G& m0 H1 Q
2 S7 P9 W: l- Y, n8 R; k