matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory.
6 o0 w" ^! I* V
>> feature('memstats')5 |$ X& @# B4 o* x: i
Physical Memory (RAM):
2 Z3 Y9 p6 H8 C, h$ uIn Use: 611 MB (26364000)
?% v$ B }7 {- {0 L7 yFree: 1428 MB (59418000)
8 |) e7 j# Q7 M( D9 S/ ^2 S- MTotal: 2039 MB (7f77c000)
( n' G$ S3 B' e& U. o6 y2 \- iPage File (Swap space):
3 A m) q: [0 t, j# z. FIn Use: 470 MB (1d628000)
7 _4 k4 u8 J+ o# oFree: 4481 MB (118156000); R+ r: b( i. Y
Total: 4951 MB (13577e000)9 J8 }+ b6 x$ j4 U; f
Virtual Memory (Address Space):
4 o) A/ z! s: \/ a: f6 G; e) Q) qIn Use: 400 MB (190d3000)
; [- W& |$ ^; ]9 Q/ hFree: 1647 MB (66f0d000)/ ?2 z% D6 Q2 [9 Q' C! y
Total: 2047 MB (7ffe0000)2 m* S% z( ?4 F& c: M! X! i
Largest Contiguous Free Blocks:
! `% V) U J5 n7 d, l1. [at 20017000] 675 MB (2a3f9000)9 n, J8 H6 w8 c4 [ m% I8 X
2. [at 4b033000] 253 MB ( fd8d000)
9 U' r8 J; b! o4 x/ E t3. [at 18010000] 127 MB ( 7ff0000)# s+ @( X! x0 m$ A6 j. Y
4. [at 68ff7000] 64 MB ( 4009000)6 g! j2 `# A- K8 M! {2 m. U
5. [at 6d7c5000] 56 MB ( 389b000)$ R/ l1 d4 X; ~6 d
6. [at 62c29000] 50 MB ( 3207000)5 \4 {+ g- g0 ]* h8 r& e! R
7. [at d330000] 44 MB ( 2ca0000)
8 Z1 a5 z( J3 r7 ]8. [at 663dd000] 41 MB ( 2983000)
- s$ l2 `" M9 E7 |9. [at 60809000] 36 MB ( 2417000)
3 L1 e7 L7 t, l$ ~' }10. [at 5adf7000] 35 MB ( 2379000)$ F* i, d0 ^6 @, c8 a
======= ==========
" ]/ @3 @4 u9 S3 u! V* I! y( L1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats')1 x5 i# H6 g7 J9 a
* P3 o7 ^; Y" _, {4 G1 vPhysical Memory (RAM):) u' t2 D. M: a$ ]# K* Z
In Use: 1082 MB (43a3a000)
* ^( ?& \# M; ?3 f8 RFree: 1467 MB (5bb96000)8 G6 X# ] q* F1 G2 G
Total: 2549 MB (9f5d0000)
/ E: _8 B) b. ^1 z6 p6 GPage File (Swap space):$ H5 }. \% B, \9 e- L' M
In Use: 1227 MB (4cbe3000)& r! T0 ]% L2 p$ @/ O# f, R
Free: 5315 MB (14c36e000)
. E3 ^) p8 y& o, H5 aTotal: 6543 MB (198f51000)- ~' e% ^5 K7 ~- w: _/ Z
Virtual Memory (Address Space):
- |8 J% w) E4 i/ _* PIn Use: 501 MB (1f5bf000)7 D, n( l% b. b3 P+ J
Free: 2570 MB (a0a21000)
( }- I. W" ]: M3 q. M' q: jTotal: 3071 MB (bffe0000). t# v5 G2 k. S
Largest Contiguous Free Blocks:$ p- }* c/ J) w9 S7 v! e" D1 h% P+ \
1. [at 1b010000] 1074 MB (432d0000)
) G6 l7 q- b0 M4 G2. [at 7fff0000] 1023 MB (3ff9c000)2 H9 {$ l- ^: z( }
3. [at 5e302000] 227 MB ( e32e000)
3 Q2 @, p) z: J g4. [at 7c41b000] 50 MB ( 32d5000)
0 j( B8 G+ K4 i) {% Z6 m3 X5. [at 6d857000] 30 MB ( 1e09000)
+ b, N, V8 Y% T7 S* `6. [at 6f66b000] 21 MB ( 1595000)
0 ?/ _: V/ q( f! h7. [at 715c3000] 20 MB ( 149d000); y s: ]' l8 \( B: n5 J
8. [at 7a038000] 18 MB ( 12f8000)
# K% x; U8 r2 l2 A+ F$ V/ r9. [at 739a6000] 17 MB ( 114a000)
& I- e' }; c; ~; K2 l0 j10. [at 70c41000] 9 MB ( 94f000)( N' @# D. e6 T; U
======= ==========+ j" N% x, c" M/ }- u; ?5 ~
2494 MB (9be3b000)
2. 采用PACK: 试了不管用
* ~ d' f5 [* T0 W3. 条件允许的话采用64位系统:32位免谈
$ O+ x! j( A, o& D7 d9 j7 z
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。
" A7 x8 v$ w+ N6 T7 n& W5. 优化程序,减少变量
6 |' ~5 ]. L* ^8 s* U
6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
; U- K8 y+ w! o0 M$ d5 a
7. 关闭Matlab Server
: ^, ~: q, O; Q) L) R0 d' [
^9 |# z8 x! j+ L) y) I7 h