matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory.
8 b" g2 k9 i) y! E4 {
>> feature('memstats')% ~/ T! O% v( a* h
Physical Memory (RAM):
, `% C2 J/ U5 E) c7 xIn Use: 611 MB (26364000)- C4 X5 O; S6 w, X6 }9 b! f
Free: 1428 MB (59418000)
) \ V! m9 L$ H0 I+ ~Total: 2039 MB (7f77c000)8 i Q2 m- \- }. i
Page File (Swap space):. h* n$ p! C1 l4 L& {0 m* y
In Use: 470 MB (1d628000)$ D6 w& u$ G; Y' ?$ J. g6 A# W+ n
Free: 4481 MB (118156000)
8 _" A Y9 K0 @- w# v# X3 bTotal: 4951 MB (13577e000)
) [0 ~4 T9 u' f0 t3 vVirtual Memory (Address Space):3 n+ i( z5 A N# X/ u) C/ d5 y
In Use: 400 MB (190d3000)- S$ z/ f5 |! J6 L$ [1 Z
Free: 1647 MB (66f0d000)
* M7 h: U# a6 jTotal: 2047 MB (7ffe0000)
1 \6 N. `7 X# K$ a* y* D: h. jLargest Contiguous Free Blocks:( }, B9 r+ A0 j i3 T* ~
1. [at 20017000] 675 MB (2a3f9000)
6 J. Y8 k: l7 b( M% ^9 p/ [" x2. [at 4b033000] 253 MB ( fd8d000)
: f1 a* c9 r% w7 u2 N; F$ @3. [at 18010000] 127 MB ( 7ff0000); J* q3 \. `; s. y& T1 Q
4. [at 68ff7000] 64 MB ( 4009000)4 i! z( `5 Z: b% P
5. [at 6d7c5000] 56 MB ( 389b000)" ~+ _1 Q: F4 e5 a& H
6. [at 62c29000] 50 MB ( 3207000): e8 e( A/ o' D( s$ y" v
7. [at d330000] 44 MB ( 2ca0000)
% A3 b8 G$ L0 ?9 J/ `8. [at 663dd000] 41 MB ( 2983000)2 i, t' B$ t, w/ q/ m$ o2 |. J
9. [at 60809000] 36 MB ( 2417000)- k0 l' A5 i" E
10. [at 5adf7000] 35 MB ( 2379000)
3 |& b$ C5 L& B======= ==========, p, m7 c& h# E; t
1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats')1 l3 Q; a# P" _# |$ B
! C( B* J4 ?5 E% a5 h1 S1 hPhysical Memory (RAM):
: O+ r/ M+ O1 N+ K; Z9 |! Y3 RIn Use: 1082 MB (43a3a000)
- R- ^8 b8 o ~, m) a/ DFree: 1467 MB (5bb96000)
* l6 d* p6 ?8 e0 Y! t. \Total: 2549 MB (9f5d0000)
. L- H. }9 T- [: O( ~3 q$ xPage File (Swap space):) q6 O+ v5 k# \1 Z0 f7 [7 r0 t6 V
In Use: 1227 MB (4cbe3000)
C. b6 U! e: @; y" ]Free: 5315 MB (14c36e000)
" y7 D% i0 A3 zTotal: 6543 MB (198f51000)& D" @" ~0 \3 H; y5 k- N
Virtual Memory (Address Space):
% ^% y/ ]9 ]+ w0 C& wIn Use: 501 MB (1f5bf000)3 R1 ?1 p- r% {- `1 ]' Q0 Q* q
Free: 2570 MB (a0a21000); Y# r: t7 H3 f, F: J
Total: 3071 MB (bffe0000)
# }% t2 M0 a8 i9 L2 R/ Z: ~9 U$ m' fLargest Contiguous Free Blocks:
4 a) v! J0 k. R; |, _* L6 j) ~, i0 u) S1. [at 1b010000] 1074 MB (432d0000)
" }4 S- w+ X0 N- P$ g+ t; ~8 S5 k2. [at 7fff0000] 1023 MB (3ff9c000)4 ?* j' L; [! J9 O/ i
3. [at 5e302000] 227 MB ( e32e000)6 K- O7 J! h% D' V
4. [at 7c41b000] 50 MB ( 32d5000)
' c7 J6 L2 e# u7 C) l3 O5. [at 6d857000] 30 MB ( 1e09000)
" i, ^, \# j* V" q, s" o$ E$ t6. [at 6f66b000] 21 MB ( 1595000)
6 A9 z6 `, V- i! v7. [at 715c3000] 20 MB ( 149d000)
: K* E9 M4 b- a' O4 I) Z8. [at 7a038000] 18 MB ( 12f8000)3 Y- [$ }- Q2 t2 Y: s- F" b) N
9. [at 739a6000] 17 MB ( 114a000)# F) H" k6 y9 @$ T, p) N* H, G+ S! k6 f
10. [at 70c41000] 9 MB ( 94f000)
6 ?/ T6 O2 {& b5 N4 j+ R9 V======= ==========5 t# U' O$ Z; U6 h/ g% N
2494 MB (9be3b000)
2. 采用PACK: 试了不管用
, M0 l) ]5 @, _" R3 Q3. 条件允许的话采用64位系统:32位免谈
; I3 G0 k# D Q* N& Y9 n4. 采用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。
9 O& w! H k8 m
5. 优化程序,减少变量
; r H. c* O( ]2 f8 r1 e" k! x2 p
6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
1 C: n l5 U |: M, v7. 关闭Matlab Server
0 y G% e+ H5 R' w
! X1 \! @ F" T* b# B