matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory.
$ B8 H" ?2 u9 F
>> feature('memstats')
5 z- q, r! ]: {2 V2 f1 `Physical Memory (RAM):; d- I9 E* }4 v+ _
In Use: 611 MB (26364000)% z) T2 ^ b3 }- b8 g
Free: 1428 MB (59418000)2 o5 p5 {4 U w+ t
Total: 2039 MB (7f77c000)" }8 @! u( i+ w9 y @' l$ ]
Page File (Swap space):
; q1 ^9 Y- r" w/ E) F" MIn Use: 470 MB (1d628000)5 I& [( m. b4 H; L
Free: 4481 MB (118156000)
6 n" j4 Q& Q+ P% C; |- f& |8 @Total: 4951 MB (13577e000)' O6 D Y7 S6 S- B( G
Virtual Memory (Address Space):
9 i* j; Y% v1 O$ N3 n1 S7 @In Use: 400 MB (190d3000)
0 C- K6 }) H1 Y; r9 ~Free: 1647 MB (66f0d000)
/ M- q: O, \+ z, `5 a3 K2 QTotal: 2047 MB (7ffe0000)' i' Z1 b, a! t
Largest Contiguous Free Blocks:
3 _4 R7 K1 P! c1. [at 20017000] 675 MB (2a3f9000)
* e, ` ^) p! h" j2. [at 4b033000] 253 MB ( fd8d000)$ f( s3 e$ o, v$ j# w; P @2 q
3. [at 18010000] 127 MB ( 7ff0000)+ F3 [. F |2 j# _" O) C- [
4. [at 68ff7000] 64 MB ( 4009000)
' y/ X. D" }) K8 D$ c5. [at 6d7c5000] 56 MB ( 389b000)2 T# ^0 R' A2 G$ B2 w+ S8 b$ Y
6. [at 62c29000] 50 MB ( 3207000)/ q! y. L6 X; u- U A4 ^5 P1 j
7. [at d330000] 44 MB ( 2ca0000)* F( d- n! U! s) k
8. [at 663dd000] 41 MB ( 2983000)
( {) _9 Y2 k& H( w/ S- G9. [at 60809000] 36 MB ( 2417000)8 q( D% b9 A) l
10. [at 5adf7000] 35 MB ( 2379000)
- t. v6 b/ Z7 N& ~======= ==========: C2 `: c! ^) V, I* m! H& G [
1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats')
* t7 k, _/ M2 V, U, t
" Q4 h* }3 k& C7 w% T N% cPhysical Memory (RAM):
( A- u6 h9 v* I7 {& K8 @) j! @, tIn Use: 1082 MB (43a3a000)
9 [2 w' l9 |6 {( _" r4 uFree: 1467 MB (5bb96000)* p( w& q( B$ e3 q
Total: 2549 MB (9f5d0000)
* z+ B4 E9 m" _; d. FPage File (Swap space):
0 g' A9 N$ W" C3 G0 m2 E% wIn Use: 1227 MB (4cbe3000)4 q& i6 R4 _) }; G) ~
Free: 5315 MB (14c36e000)6 S8 I) i7 x: u% Y( f K
Total: 6543 MB (198f51000)
; h0 P- f6 L2 tVirtual Memory (Address Space):! T% `+ C, X$ G2 {4 L7 k
In Use: 501 MB (1f5bf000)3 {1 u* g' H6 j: K0 E
Free: 2570 MB (a0a21000)8 e8 b2 I1 ?2 H/ f i! M. E& B) f
Total: 3071 MB (bffe0000)
* A1 G$ o- e. _8 X0 R3 ~( LLargest Contiguous Free Blocks:0 W: H8 R! M( y3 r& T
1. [at 1b010000] 1074 MB (432d0000)4 `, Z/ X8 x8 Y9 E+ \8 m
2. [at 7fff0000] 1023 MB (3ff9c000), T* Q8 I' u' T2 a3 k& A
3. [at 5e302000] 227 MB ( e32e000)9 ?6 Q5 q' q/ x% A& I
4. [at 7c41b000] 50 MB ( 32d5000)
$ b. J! o1 T0 N1 h5. [at 6d857000] 30 MB ( 1e09000)* n2 p! ?, W( ?3 C) E
6. [at 6f66b000] 21 MB ( 1595000)7 l0 t+ B3 p9 ^- M% l. v
7. [at 715c3000] 20 MB ( 149d000)+ ?; Q! T4 C$ f1 l
8. [at 7a038000] 18 MB ( 12f8000)6 d( ]& P# r7 o' f2 h# |; [) D
9. [at 739a6000] 17 MB ( 114a000)
. k: o; Y5 C2 D/ _- e( ^10. [at 70c41000] 9 MB ( 94f000)
3 w& K* I. J( R( k======= ==========: s5 d7 C; k) e4 z7 Y
2494 MB (9be3b000)
2. 采用PACK: 试了不管用
+ ~2 V9 Y1 v7 M1 |; y. b
3. 条件允许的话采用64位系统:32位免谈
+ t( d$ U% w ?+ e- }4 y3 ^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。
* q# h5 \4 @, S; F5. 优化程序,减少变量
6 n& n& w x* P9 ^; |6 B6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
, q% g6 e1 w/ m6 Y' b7. 关闭Matlab Server
0 ?' l# K6 _+ q7 p; T
+ f6 F8 v" f5 ?( d2 t0 C$ i' d