01記憶體管理-概述
記憶體管理
- 記憶體消耗
- 記憶體管理模型
- 語言架構
- 減少記憶體使用的實踐
1 記憶體消耗
- 棧大小
每一個執行緒都有專有的棧空間,棧記憶體線上程存在期間自由使用。
每一個函式都有其自己的棧幀,所有的變數都會載入到方法的棧幀中,並且消耗一定的記憶體。
(函式的遞迴呼叫自己說白了就是棧記憶體的溢位)
- 堆大小
每個程式的所有執行緒共享一個堆,一個裝置的可以使用的堆大小遠遠小於記憶體的RAM,最多不超過2分之一。
通過類建立的物件都存放在堆當中
建立一個Person 類
@interface Person : NSObject
/** */
@property (nonatomic,strong)NSString *name;
/** */
@property (nonatomic,assign)NSInteger age;
@end
在另外一個類上面
// 這裡面建立的Person 就是
- (Person *)createPersonWithName:(NSString *)name age:(NSInteger)age
{
// 通過類建立的s所有的資料都存放在堆中
Person *p = [Person new];
p.age = age;
p.name = name;
return p;
}
// 函式中將堆記憶體中copy到棧中
- (void)totalAge{
NSMutableArray * pArr = [NSMutableArray array];
// 0 for 迴圈 建立 10個人
for (int i = 0; i < 10; i ++) {
NSString *name = [NSString stringWithFormat:@"人物--%d",i];
[pArr addObject:[self createPersonWithName:name age:(NSInteger)i]];
}
// 1 計算著10個人的年紀之和
// totalAge 是開闢棧記憶體的
NSInteger totalAge = 0;
for (Person *p in pArr) {
// MARK 在使用跑p的 age的時候,必須要先複製到棧上面,才能進行加到totalAge 上
totalAge += p.age;
}
}
相關文章
- 記憶體管理 記憶體管理概述記憶體
- 作業系統記憶體管理概述作業系統記憶體
- 【作業系統】記憶體管理概述作業系統記憶體
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- iPhone之IOS5記憶體管理(ARC技術概述)iPhoneiOS記憶體
- 【記憶體管理】記憶體佈局記憶體
- 記憶體管理記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Aerospike的bin記憶體管理--即列記憶體管理ROS記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- Linux 記憶體管理:記憶體對映Linux記憶體
- JVM-概述和記憶體區域JVM記憶體
- 記憶體管理-swMemoryGlobal記憶體
- OC記憶體管理記憶體
- iOS 記憶體管理iOS記憶體
- JavaScript 記憶體管理JavaScript記憶體
- MySQL記憶體管理MySql記憶體
- Oracle 記憶體管理Oracle記憶體
- JavaScript記憶體管理JavaScript記憶體
- 2 Day DBA-管理Oracle例項-管理記憶體-修改記憶體設定-自動記憶體管理Oracle記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- 2018.3.1、android-記憶體管理Android記憶體
- 2 Day DBA-管理Oracle例項-管理記憶體-關於記憶體管理Oracle記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- C語言-記憶體管理之二[記憶體指令]C語言記憶體
- CF的記憶體管理。記憶體
- “理解”iOS記憶體管理iOS記憶體
- iOS 記憶體管理MRCiOS記憶體
- iOS 記憶體管理研究iOS記憶體
- HotSpot JVM 記憶體管理HotSpotJVM記憶體
- Flink記憶體管理記憶體
- Windows記憶體管理-分段Windows記憶體
- JavaScript的記憶體管理JavaScript記憶體