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;
}
}
相關文章
- 記憶體管理 記憶體管理概述記憶體
- 【作業系統】記憶體管理概述作業系統記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 【記憶體管理】記憶體佈局記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Go:記憶體管理與記憶體清理Go記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- JVM-概述和記憶體區域JVM記憶體
- JavaScript 記憶體管理JavaScript記憶體
- iOS 記憶體管理iOS記憶體
- Android記憶體管理Android記憶體
- OC記憶體管理記憶體
- 記憶體管理-swMemoryGlobal記憶體
- Flink記憶體管理記憶體
- MySQL記憶體管理MySql記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- Linux實體記憶體管理Linux記憶體
- iOS 記憶體管理MRCiOS記憶體
- “理解”iOS記憶體管理iOS記憶體
- iOS 記憶體管理研究iOS記憶體
- python的記憶體管理Python記憶體
- 管理 Bitmap 記憶體(譯)記憶體
- C++記憶體管理C++記憶體
- CF的記憶體管理。記憶體
- Windows記憶體管理-分段Windows記憶體
- JavaScript的記憶體管理JavaScript記憶體
- HotSpot JVM 記憶體管理HotSpotJVM記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- Spark學習——記憶體管理Spark記憶體
- Objective-C記憶體管理Object記憶體
- 技術分享:記憶體管理記憶體
- Java記憶體管理機制Java記憶體
- Objective-C 記憶體管理Object記憶體
- 記憶體管理(Debug Memory Graph)記憶體
- golang手動管理記憶體Golang記憶體