matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory." E2 r' N7 z$ U
>> feature('memstats'); Z- F" K0 {" Z4 X5 ^# A
Physical Memory (RAM):3 W- X% E# T' l/ O1 }
In Use: 611 MB (26364000), |& F$ j6 Z# f I1 O/ I) {
Free: 1428 MB (59418000) w- d' j) ?2 L# ~" _
Total: 2039 MB (7f77c000)
+ E( s( M, [: q7 ?Page File (Swap space):
+ z" n) S) b% d/ q8 J% ?In Use: 470 MB (1d628000)
. ?0 l: a. O" ~) B5 ~& m6 lFree: 4481 MB (118156000)
m8 x. e. b" n( XTotal: 4951 MB (13577e000): \( L8 d$ V- I7 q/ [) u X4 ]
Virtual Memory (Address Space):
5 }4 t4 m/ Z- j. I8 kIn Use: 400 MB (190d3000)
7 _; p7 \( h% t- e6 {Free: 1647 MB (66f0d000)
) F% c A8 L1 N: Z4 T6 |Total: 2047 MB (7ffe0000)$ @& V. X" p# B: B. @3 C& E
Largest Contiguous Free Blocks:
1 g, T/ z/ @, `- M2 z F1. [at 20017000] 675 MB (2a3f9000)" n1 y. g0 a% X# ? @
2. [at 4b033000] 253 MB ( fd8d000)
! W# N5 g- p* T" G) U) o( n3. [at 18010000] 127 MB ( 7ff0000)
7 B: P- }' C, M" Z: K4 ?1 N6 {4. [at 68ff7000] 64 MB ( 4009000)
& W4 K& }0 e9 C& ]5. [at 6d7c5000] 56 MB ( 389b000)
' Z ^7 C* A$ W9 B% R6. [at 62c29000] 50 MB ( 3207000)
2 l; W B0 l! k/ q6 \" F7. [at d330000] 44 MB ( 2ca0000)
1 n) C* I5 ?4 g, `8. [at 663dd000] 41 MB ( 2983000)8 D* b& Z# `6 b
9. [at 60809000] 36 MB ( 2417000)3 w4 X$ k* o& T! x/ m. \
10. [at 5adf7000] 35 MB ( 2379000)6 ^# N/ B. T' T+ I" }& r9 r$ ^
======= ==========
7 U1 X; c5 M2 b+ f/ K b; _) l1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats')6 u# T4 }3 \1 ]* H* [- p
4 u1 ?# M7 D( ^8 E* R# F) r/ @Physical Memory (RAM):4 V8 j, S% ]! T/ d; P$ o4 ^3 [1 ~
In Use: 1082 MB (43a3a000)& J9 V. `7 j* e/ o
Free: 1467 MB (5bb96000)
. G' R8 B) V/ Z3 E+ S$ dTotal: 2549 MB (9f5d0000): m# P3 I1 n/ k3 \& G
Page File (Swap space):
' }2 Q$ f" y4 D hIn Use: 1227 MB (4cbe3000)
! u0 E/ {7 o$ N. qFree: 5315 MB (14c36e000)9 ~! N) ~! m, W0 Q& C
Total: 6543 MB (198f51000)* g) Q3 v9 x7 P. v
Virtual Memory (Address Space):
. H; K8 F6 x# |+ H, I; u4 jIn Use: 501 MB (1f5bf000)$ X5 t) o) {9 o1 i( r. \0 Y
Free: 2570 MB (a0a21000)8 a; g* g+ j# s0 l* @1 H, t; C
Total: 3071 MB (bffe0000)6 o1 s, `7 C7 O3 K. B) I
Largest Contiguous Free Blocks:% l7 y+ l& b {
1. [at 1b010000] 1074 MB (432d0000) B1 F; n# k& b9 C) N, B' d& u
2. [at 7fff0000] 1023 MB (3ff9c000)
& X8 h- I# C) Y& D# M, f3. [at 5e302000] 227 MB ( e32e000)
$ \3 i$ g) {' b6 R- O9 u* ?4. [at 7c41b000] 50 MB ( 32d5000)
3 _" r$ E6 n7 o0 g l) l5. [at 6d857000] 30 MB ( 1e09000)
\! Q) A/ @" p0 x0 q! f6. [at 6f66b000] 21 MB ( 1595000)
: G! d9 {! D- X7 j0 R7. [at 715c3000] 20 MB ( 149d000)
, {9 W( l& f- Q K2 D3 c; l8. [at 7a038000] 18 MB ( 12f8000)9 `# N5 l. S5 o3 Y7 m. s4 i# d% x
9. [at 739a6000] 17 MB ( 114a000)
; t9 E' N$ N& M% ~10. [at 70c41000] 9 MB ( 94f000)0 x+ c) l9 K' W0 Q- `) d+ h
======= ==========
; E2 O- q" {* C! G2494 MB (9be3b000)
2. 采用PACK: 试了不管用
; Z5 S: h9 r: I1 ~- t4 Q: ^( B3. 条件允许的话采用64位系统:32位免谈
9 n! ~6 V* k, L+ _5 u. J
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。
0 u% y# q0 A3 K# s$ i; R
5. 优化程序,减少变量
h/ W3 t2 g# _( S* V% h6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
0 u, o9 Z/ z$ p
7. 关闭Matlab Server
, B1 P( x* w2 T' d K
z6 h- M' x# L# m m- h+ i- \