matlab程序碰到out of memory的问题真是让人崩溃的一件事情,程序是别人的,不能做大的改动,只能想办法增加内存。别人总结的可用的方法有:
1. 增加虚拟内存:右击我的电脑—属性--高级--性能设置--高级--虚拟内存更改,按自己电脑的硬盘在自定义大小里设置数字,然后再按设置-确定,然后重启。否则更改无效。
对XP,我发现即使增大虚拟内存到4G, matlab可用虚拟内存仍只有2G。仍然out of memory.
( q' A) I6 X/ P$ `
>> feature('memstats')
0 X8 U7 X2 ]& s. Q) F3 GPhysical Memory (RAM):
! u+ Z" f' j) U' H3 |7 j. P) rIn Use: 611 MB (26364000)
1 T0 C1 S$ `1 k" {& b/ v8 J- KFree: 1428 MB (59418000)
5 T ^9 M' n# DTotal: 2039 MB (7f77c000)8 |+ t& n$ `) @4 _6 h
Page File (Swap space):/ ]& F8 y: r( Y6 z2 v! X
In Use: 470 MB (1d628000)9 I4 [. n0 h4 D V U: L
Free: 4481 MB (118156000)$ `) w9 P% P' A& F0 c7 \" q
Total: 4951 MB (13577e000)% `5 }* l9 k! d5 i- M3 s8 G
Virtual Memory (Address Space):
# u8 i3 C( I4 R; {1 B- Y& oIn Use: 400 MB (190d3000) v6 e$ P4 O# M' c) e( U6 P/ ^
Free: 1647 MB (66f0d000)
' S% n; J; K) u2 q QTotal: 2047 MB (7ffe0000)
' ^# I) g* o; W* l7 e; oLargest Contiguous Free Blocks:
% ^, b1 J, U$ ^8 j6 `. @1. [at 20017000] 675 MB (2a3f9000): ?( _, h' n, }8 s
2. [at 4b033000] 253 MB ( fd8d000)
" f$ f: {: t, O' P6 i8 r& S3. [at 18010000] 127 MB ( 7ff0000)4 [3 f8 z1 f [5 |7 ?2 u4 N
4. [at 68ff7000] 64 MB ( 4009000)" x$ u2 E$ q- Z4 I3 @ x
5. [at 6d7c5000] 56 MB ( 389b000)
. b" P9 z) `: `6. [at 62c29000] 50 MB ( 3207000)
6 O w% v5 n. @' Y9 o7. [at d330000] 44 MB ( 2ca0000); F/ U" m: E7 v8 \; T) O3 y
8. [at 663dd000] 41 MB ( 2983000)% N' j" U8 f/ q; L |+ ]
9. [at 60809000] 36 MB ( 2417000)
: g9 s) J1 ^- O @% A10. [at 5adf7000] 35 MB ( 2379000)9 P9 ?. s4 B" z& S6 ~
======= ==========
1 q2 a( P, `( P$ |1385 MB (569d4000)
对Vista系统,可能是因为我在第四步设置了命令3GB switche:可用最大虚拟内存是3G
>> feature('memstats')0 [- l7 x8 U7 p9 T% R/ x- ?
% _: B5 r7 c* Y% B) u1 K( BPhysical Memory (RAM):; ~/ t2 M( e5 I. ^6 G
In Use: 1082 MB (43a3a000)1 e% [- b+ a3 }2 k
Free: 1467 MB (5bb96000)
2 U% Z* a; w5 E- eTotal: 2549 MB (9f5d0000): U8 R. R5 W, z% Q; [& m" A$ @
Page File (Swap space):. I# S# `9 a9 r! a7 f! V
In Use: 1227 MB (4cbe3000)) J4 Z) B3 [$ i: G. d N
Free: 5315 MB (14c36e000)
5 _& Q/ L" o. N7 W1 W0 MTotal: 6543 MB (198f51000)/ P+ @. u9 T8 o. g% v+ I
Virtual Memory (Address Space):
0 \9 I! X$ _: J) h3 `% SIn Use: 501 MB (1f5bf000)0 z2 g0 X N% D+ U1 A2 g
Free: 2570 MB (a0a21000)
9 q M$ c( m: Y V- q1 MTotal: 3071 MB (bffe0000). b3 Z+ V! x9 z; ?( A9 m7 A( P! Z
Largest Contiguous Free Blocks:7 G2 u4 q: k4 A3 I( j
1. [at 1b010000] 1074 MB (432d0000) G$ \5 r3 R; Z
2. [at 7fff0000] 1023 MB (3ff9c000)( }8 P' s( k; P& n/ F8 \. v
3. [at 5e302000] 227 MB ( e32e000)
; G; h$ I* Y& i! x4. [at 7c41b000] 50 MB ( 32d5000)
r+ R: X1 H1 {5 T' y* X" f3 @5. [at 6d857000] 30 MB ( 1e09000)8 g" e( R, T- s+ J: P$ D6 O
6. [at 6f66b000] 21 MB ( 1595000) ]" M* O e2 m5 K' M
7. [at 715c3000] 20 MB ( 149d000)
# t% u: t4 q$ _3 b$ Q- j- ?& {8. [at 7a038000] 18 MB ( 12f8000); I2 r; b1 u( c
9. [at 739a6000] 17 MB ( 114a000)
; ~- ?* J. [9 r; k @% ^3 R* p7 L10. [at 70c41000] 9 MB ( 94f000)) y. w' y5 e3 o
======= ==========( c$ B0 a- B6 S5 N7 P
2494 MB (9be3b000)
2. 采用PACK: 试了不管用
{# u- s- ]- H* A. G* x; }0 i+ }
3. 条件允许的话采用64位系统:32位免谈
: a, ?! u T! 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。
. ]3 j+ E% L0 k e/ y( l5. 优化程序,减少变量
1 H$ ?+ S" e8 T" [& o% V4 }6 v6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
* k" Z6 E t( E( _+ K' S: Y0 C' g7. 关闭Matlab Server
% g6 i4 @% W# c5 P* Y( p2 H2 n% }
, S0 t0 z, a1 ?9 G; Y/ k) x