SlideShare a Scribd company logo
メモリ管理の話 
2014/09/05 エスキュービズム・テクノロジー勉強会
メモリ管理とは? 
確保したメモリは、必ず破棄する 
char *hoge = (char*)malloc(10); 
//…… 
free(hoge);
メモリ管理とは? 
確保したメモリは、必ず破棄する 
 => 結構難しい 
char *hoge = (char*)malloc(10); 
//…… <- ここでreturn、例外があるとリーク 
free(hoge);
メモリ管理とは? 
メモリ開放を絶対忘れないようにしよう
メモリ管理とは? 
メモリ開放を絶対忘れないようにしよう 
メモリ解放が必要ない仕組みを利用しよう
参照カウンタとガベージコレクション 
不要になったメモリを自動的に開放する仕組み 
参照カウント 
 参照されている数をカウントし、0になったらメモリ解放 
ガベージコレクション 
 参照関係をたどり、見つかったオブジェクト以外を開放
言語毎のメモリ管理 
手動管理 
 C C++(shared_ptrなし) 
参照カウンタ 
 C++(shard_ptrあり) 
ガベージコレクション 
 Ruby D Java  
-> Objectiv-C䛿䠛
言語毎のメモリ管理 
手動管理 
 C C++(shared_ptrなし) 
参照カウンタ 
 C++(shard_ptrあり) Objective-C(ARC) Swift 
ガベージコレクション 
 Ruby D Java  
-> PHP䛿䠛
言語毎のメモリ管理 
手動管理 
 C C++(shared_ptrなし) 
参照カウンタ 
 C++(shard_ptrあり) Objective-C(ARC) Swift PHP 
ガベージコレクション 
 Ruby D Java  
-> C#䛿䠛
言語毎のメモリ管理 
手動管理 
 C C++(shared_ptrなし) 
参照カウンタ 
 C++(shard_ptrあり) Objective-C(ARC) Swift PHP 
ガベージコレクション 
 Ruby D Java C# 
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ
参照カウンタ 
プロパティからの参照
参照カウンタ 
プロパティからの参照
参照カウンタ 
プロパティからの参照
参照カウンタ 
プロパティからの参照
参照カウンタ 
プロパティからの参照
参照カウンタ 
プロパティからの参照
参照カウンタ 
弱点:循環参照
参照カウンタ 
弱点:循環参照
参照カウンタ 
対策:弱参照 (参照カウントを上げない参照)
参照カウンタ 
多くの場合、子から親への参照をweakにする
参照カウンタ 
多くの場合、子から親への参照をweakにする 
代表的な例が、Objective-Cのdelegete 
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.text_clientName.delegate = self; 
self.text_orderId.delegate = self; 
}
参照カウンタ 
多くの場合、子から親への参照をweakにする 
代表的な例が、Objective-Cのdelegete 
プロパティの定義でweakに 
@property (weak) id<ChoiceGroupViewControllerDelegate> delegate;
ガベージコレクタ(GC) 
空いた時間に自動的にメモリを解放 
使われているオブジェクトの参照を辿って使用中の 
オブジェクトを判別 
● コピーGC 
● マーク&スイープ 
● これらに+αした方式(世代別GC) 
等が代表的
ガベージコレクタ(GC)
ガベージコレクタ(GC)
ガベージコレクタ(GC)
ガベージコレクタ(GC)
ガベージコレクタ(GC)
ガベージコレクタ(GC) 
ただし、万能ではない 
無限に配列に追加する 
子のオブジェクトを次々に参照する 
等プログラムのバグでリークを起こすことも 
後はライブラリのバグとか......
ガベージコレクタ(GC)
ガベージコレクタ(GC) 
メモリリーク対策 
● グローバルなコレクションへの追加は注意 
● Viewなど複雑な参照関係に注意 
● 怪しいと思ったら変数にnullを代入 
● 弱参照を使う(GCにも弱参照はある)
クロージャに気をつけよう 
クロージャとは? 
wikipedia(http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83% 
BC%E3%82%B8%E3%83%A3)より引用 
䜽䝻䞊䝆䝱䠄䜽䝻䞊䝆䝱䞊䚸ⱥ: closure䠅䚸㛵ᩘ㛢ໟ䛿䝥䝻䜾䝷 
䝭䞁䜾ゝㄒ䛻䛚䛡䜛㛵ᩘ䜸䝤䝆䜵䜽䝖䛾୍✀䚹䛔䛟䛴䛛䛾ゝㄒ 
䛷䛿䝷䝮䝎ᘧ䜔↓ྡ㛵ᩘ䛷ᐇ⌧䛧䛶䛔䜛䚹ᘬᩘ௨እ䛾ኚᩘ䜢 
ᐇ⾜᫬䛾⎔ቃ䛷䛿䛺䛟䚸⮬㌟䛜ᐃ⩏䛥䜜䛯⎔ቃ䠄㟼ⓗ䝇䝁䞊 
䝥䠅䛻䛚䛔䛶ゎỴ䛩䜛䛣䛸䜢≉ᚩ䛸䛩䜛䚹 
=> 㛵ᩘእ䛾ኚᩘ䛜฼⏝䛷䛝䜛䝷䝮䝎ᘧ
クロージャに気をつけよう 
function convertEncording($line) { 
$encoding = mb_detect_encoding(implode(" ", $line)); 
if ($encoding !== 'UTF-8') { 
$line = __::map($line, function($v, $k, $line) { 
$encoding = mb_detect_encoding(implode(" ", $line)); 
return mb_convert_encoding($v, 'UTF-8', $encoding); 
}); 
} 
return $line; 
} 
ECsvUpload䜘䜚 
䚷㔜」䛧䛯㛵ᩘ࿧䜃ฟ䛧䛜䛒䜛
クロージャに気をつけよう 
function convertEncording($line) { 
$encoding = mb_detect_encoding(implode(" ", $line)); 
if ($encoding !== 'UTF-8') { 
$line = __::map($line, function($v, $k, $line) { 
// $encoding = mb_detect_encoding(implode(" ", $line)); 
return mb_convert_encoding($v, 'UTF-8', $encoding); 
}); 
} 
return $line; 
} 
䛣䜜䛿䛷䛝䛺䛔
クロージャに気をつけよう 
function convertEncording($line) { 
$encoding = mb_detect_encoding(implode(" ", $line)); 
if ($encoding !== 'UTF-8') { 
$line = __::map($line, function($v, $k, $line) use ($encoding) { 
// $encoding = mb_detect_encoding(implode(" ", $line)); 
return mb_convert_encoding($v, 'UTF-8', $encoding); 
}); 
} 
return $line; 
} 
᫂♧ⓗ䛻䜻䝱䝥䝏䝱䛧䛺䛡䜜䜀䛺䜙䛺䛔 
䚷=> 䜽䝻䞊䝆䝱䛿እ㒊ኚᩘ䜈䛾ཧ↷䜢ᣢ䛴
クロージャに気をつけよう 
昔、RequestHelperにも 
クロージャによる循環参照があった。
クロージャに気をつけよう
クロージャに気をつけよう 
䜽䝻䞊䝆䝱ෆ䛷䜽䝻䞊䝆䝱⮬㌟䜢ཧ↷ 
䚷-> 䝁䞁䝟䜲䝷䛻䜒㆙࿌䛥䜜䛶䜛
クロージャに気をつけよう
クロージャに気をつけよう
クロージャに気をつけよう
クロージャに気をつけよう 
循環参照!
C#のイベントに気をつけよう 
C#のイベントは強参照のコレクション 
Viewに登録することが多い 
イベントにはクロージャを登録できる 
=> リークしやすい 
view.onClick += (Event e) { 
// ……. 
}

More Related Content

More from エンジニア勉強会 エスキュービズム

Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみた
エンジニア勉強会 エスキュービズム
 
Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発
エンジニア勉強会 エスキュービズム
 
機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow
エンジニア勉強会 エスキュービズム
 
Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。
エンジニア勉強会 エスキュービズム
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか
2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)
エンジニア勉強会 エスキュービズム
 
Dockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについてDockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについて
エンジニア勉強会 エスキュービズム
 
Azureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについてAzureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについて
エンジニア勉強会 エスキュービズム
 
レイアウトについて
レイアウトについてレイアウトについて
アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)
エンジニア勉強会 エスキュービズム
 
何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか
エンジニア勉強会 エスキュービズム
 
IoTのIを考えてみる話
IoTのIを考えてみる話IoTのIを考えてみる話
AzureのIaaSとかの話
AzureのIaaSとかの話AzureのIaaSとかの話
【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ
エンジニア勉強会 エスキュービズム
 
【エンジニア勉強会】PMやってみた
【エンジニア勉強会】PMやってみた【エンジニア勉強会】PMやってみた
【エンジニア勉強会】PMやってみた
エンジニア勉強会 エスキュービズム
 
Dockerを社内で使うために
Dockerを社内で使うためにDockerを社内で使うために
Dockerを社内で使うために
エンジニア勉強会 エスキュービズム
 

More from エンジニア勉強会 エスキュービズム (20)

Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみた
 
はじめての品質
はじめての品質はじめての品質
はじめての品質
 
Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発
 
機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow
 
Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。
 
ほんのりTDD
ほんのりTDDほんのりTDD
ほんのりTDD
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか
IoTで何をやったか
 
2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)
 
Dockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについてDockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについて
 
VRのコンテンツ
VRのコンテンツVRのコンテンツ
VRのコンテンツ
 
Azureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについてAzureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについて
 
レイアウトについて
レイアウトについてレイアウトについて
レイアウトについて
 
アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)
 
何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか
 
IoTのIを考えてみる話
IoTのIを考えてみる話IoTのIを考えてみる話
IoTのIを考えてみる話
 
AzureのIaaSとかの話
AzureのIaaSとかの話AzureのIaaSとかの話
AzureのIaaSとかの話
 
【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ
 
【エンジニア勉強会】PMやってみた
【エンジニア勉強会】PMやってみた【エンジニア勉強会】PMやってみた
【エンジニア勉強会】PMやってみた
 
Dockerを社内で使うために
Dockerを社内で使うためにDockerを社内で使うために
Dockerを社内で使うために
 
Riot.jsに触れてみた話
Riot.jsに触れてみた話Riot.jsに触れてみた話
Riot.jsに触れてみた話
 

Recently uploaded

単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 

Recently uploaded (14)

単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 

メモリ管理の話_エスキュービズム勉強会20140926