matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory." v4 ]2 ~8 t: t; ^3 y& ]; U
>> feature('memstats')$ k9 j8 n- D0 E$ K, Y" i2 \! z
Physical Memory (RAM):8 M% |0 j8 H6 j8 R* `$ F K
In Use: 611 MB (26364000)8 ]/ V2 i9 v7 n1 n, ?) N: B# Z( T
Free: 1428 MB (59418000)8 H E, p' Q \# A4 G+ d# w
Total: 2039 MB (7f77c000)$ @( Y+ u0 z) D2 c3 Y$ c0 ~
Page File (Swap space):
8 g. W. c% k2 eIn Use: 470 MB (1d628000)6 C8 B( @4 ^- \9 @1 F
Free: 4481 MB (118156000)
) |+ ~3 ^5 m6 |& W: \1 O" I7 o! oTotal: 4951 MB (13577e000)
) e6 X. Z0 J5 s* h) I! w7 D* K7 iVirtual Memory (Address Space):& c# d" o1 e Q0 U; e1 |
In Use: 400 MB (190d3000)# P% x! ]7 m) V/ r
Free: 1647 MB (66f0d000)
4 ?- v. v6 W7 ]0 u$ l" sTotal: 2047 MB (7ffe0000)9 c& @) y G' _# v* m! f) K" ~
Largest Contiguous Free Blocks:
# G1 u4 d+ y2 ?& i% d1. [at 20017000] 675 MB (2a3f9000)% T5 J9 E8 N# o+ }8 j x, G
2. [at 4b033000] 253 MB ( fd8d000)$ A! z9 x* U; }
3. [at 18010000] 127 MB ( 7ff0000)
, J1 }5 l+ ]' F4. [at 68ff7000] 64 MB ( 4009000)
; K4 {5 k8 t/ c+ K5. [at 6d7c5000] 56 MB ( 389b000)
, ~8 A. @1 P& ]* U6. [at 62c29000] 50 MB ( 3207000)
0 H$ s; z: \9 C' t7. [at d330000] 44 MB ( 2ca0000)/ w- r4 G* N0 t0 ?
8. [at 663dd000] 41 MB ( 2983000)
. E6 c+ Y1 E) v* I9. [at 60809000] 36 MB ( 2417000)
/ I5 F8 H: ]( c) i$ {1 o10. [at 5adf7000] 35 MB ( 2379000)8 Q! {2 `* x9 u, o
======= ==========4 K) R% N0 ]3 k8 t; G
1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats')! D% N5 P7 s j% Y
& ^# C$ a" Z2 e% Z8 @, ]2 _
Physical Memory (RAM):6 ~6 b! x D- n7 T6 h
In Use: 1082 MB (43a3a000)
! W3 g, @" V; g. s! ], EFree: 1467 MB (5bb96000). X+ L+ X( Y0 o: Z9 v5 w
Total: 2549 MB (9f5d0000)2 Z4 S( T8 b6 |( b0 d1 Y/ v) J% f! e4 L
Page File (Swap space):6 ~& X- O2 |) k6 C" [/ }
In Use: 1227 MB (4cbe3000)
. c/ @5 Q& f1 X( h1 C$ @: OFree: 5315 MB (14c36e000)" U/ [0 {* z8 L& i( D
Total: 6543 MB (198f51000)
5 _; A& u0 S) c9 z- V' {Virtual Memory (Address Space):
9 z/ o2 v5 X. `( p# fIn Use: 501 MB (1f5bf000)
+ O2 D. g7 h: tFree: 2570 MB (a0a21000)% z5 w! Q/ Y. B( k, G( z
Total: 3071 MB (bffe0000)
1 D5 R" c8 Z5 q# {$ SLargest Contiguous Free Blocks:: }1 [+ r- O. _8 j4 ^
1. [at 1b010000] 1074 MB (432d0000)
# E0 W) s0 p( X2. [at 7fff0000] 1023 MB (3ff9c000)
7 H' |( x; @! S: F0 W) _& K, j3. [at 5e302000] 227 MB ( e32e000)6 R5 X P# D4 Z; A
4. [at 7c41b000] 50 MB ( 32d5000)/ s/ C: g; P! e$ Z6 g- [/ b/ r* M" k( s
5. [at 6d857000] 30 MB ( 1e09000)9 |1 f I3 R7 \1 D1 {
6. [at 6f66b000] 21 MB ( 1595000)
! a9 g, O. q, R7 k% E2 j9 y7. [at 715c3000] 20 MB ( 149d000)7 _5 a* l; ^6 a: I: g7 F) e
8. [at 7a038000] 18 MB ( 12f8000)
* Q1 a1 T' t n) ?# j8 ]% s9. [at 739a6000] 17 MB ( 114a000)
! k8 Y2 K0 W6 o. t0 j9 Q10. [at 70c41000] 9 MB ( 94f000)5 [# L* r$ Z- Z2 M7 U7 W0 P8 g
======= ==========" R! C# `2 N+ ^5 ~) z6 ^
2494 MB (9be3b000)
2. 采用PACK: 试了不管用
0 ~/ _ B. f) R# Z0 \" A
3. 条件允许的话采用64位系统:32位免谈
, J# y N. @. A: m8 k
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。
6 \( E6 ^- M2 A+ G/ y d+ Y* U0 q5. 优化程序,减少变量
& B* j! p# w, k7 _ u
6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
* z( C" c! Y9 h& h7. 关闭Matlab Server
/ r* y, ~( |7 Q! Q
5 ?; L" A3 A* ^; l8 X