Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Submit Search
Upload
メモリ管理の話_エスキュービズム勉強会20140926
•
3 likes
•
1,107 views
2014/9/26 エスキュービズム社内勉強会時に使用した資料になります。
Read less
Read more
1 of 53
Download now
Download to read offline
More Related Content
メモリ管理の話_エスキュービズム勉強会20140926
1.
メモリ管理の話 2014/09/05 エスキュービズム・テクノロジー勉強会
2.
メモリ管理とは? 確保したメモリは、必ず破棄する char
*hoge = (char*)malloc(10); //…… free(hoge);
3.
メモリ管理とは? 確保したメモリは、必ず破棄する =>
結構難しい char *hoge = (char*)malloc(10); //…… <- ここでreturn、例外があるとリーク free(hoge);
4.
メモリ管理とは? メモリ開放を絶対忘れないようにしよう
5.
メモリ管理とは? メモリ開放を絶対忘れないようにしよう メモリ解放が必要ない仕組みを利用しよう
6.
参照カウンタとガベージコレクション 不要になったメモリを自動的に開放する仕組み 参照カウント
参照されている数をカウントし、0になったらメモリ解放 ガベージコレクション 参照関係をたどり、見つかったオブジェクト以外を開放
7.
言語毎のメモリ管理 手動管理 C C++(shared_ptrなし)
参照カウンタ C++(shard_ptrあり) ガベージコレクション Ruby D Java -> Objectiv-C䛿䠛
8.
言語毎のメモリ管理 手動管理 C C++(shared_ptrなし)
参照カウンタ C++(shard_ptrあり) Objective-C(ARC) Swift ガベージコレクション Ruby D Java -> PHP䛿䠛
9.
言語毎のメモリ管理 手動管理 C C++(shared_ptrなし)
参照カウンタ C++(shard_ptrあり) Objective-C(ARC) Swift PHP ガベージコレクション Ruby D Java -> C#䛿䠛
10.
言語毎のメモリ管理 手動管理 C C++(shared_ptrなし)
参照カウンタ C++(shard_ptrあり) Objective-C(ARC) Swift PHP ガベージコレクション Ruby D Java C#
11.
参照カウンタ
12.
参照カウンタ
13.
参照カウンタ
14.
参照カウンタ
15.
参照カウンタ
16.
参照カウンタ
17.
参照カウンタ
18.
参照カウンタ
19.
参照カウンタ
20.
参照カウンタ
21.
参照カウンタ プロパティからの参照
22.
参照カウンタ プロパティからの参照
23.
参照カウンタ プロパティからの参照
24.
参照カウンタ プロパティからの参照
25.
参照カウンタ プロパティからの参照
26.
参照カウンタ プロパティからの参照
27.
参照カウンタ 弱点:循環参照
28.
参照カウンタ 弱点:循環参照
29.
参照カウンタ 対策:弱参照 (参照カウントを上げない参照)
30.
参照カウンタ 多くの場合、子から親への参照をweakにする
31.
参照カウンタ 多くの場合、子から親への参照をweakにする 代表的な例が、Objective-Cのdelegete
- (void)viewDidLoad { [super viewDidLoad]; self.text_clientName.delegate = self; self.text_orderId.delegate = self; }
32.
参照カウンタ 多くの場合、子から親への参照をweakにする 代表的な例が、Objective-Cのdelegete
プロパティの定義でweakに @property (weak) id<ChoiceGroupViewControllerDelegate> delegate;
33.
ガベージコレクタ(GC) 空いた時間に自動的にメモリを解放 使われているオブジェクトの参照を辿って使用中の
オブジェクトを判別 ● コピーGC ● マーク&スイープ ● これらに+αした方式(世代別GC) 等が代表的
34.
ガベージコレクタ(GC)
35.
ガベージコレクタ(GC)
36.
ガベージコレクタ(GC)
37.
ガベージコレクタ(GC)
38.
ガベージコレクタ(GC)
39.
ガベージコレクタ(GC) ただし、万能ではない 無限に配列に追加する
子のオブジェクトを次々に参照する 等プログラムのバグでリークを起こすことも 後はライブラリのバグとか......
40.
ガベージコレクタ(GC)
41.
ガベージコレクタ(GC) メモリリーク対策 ●
グローバルなコレクションへの追加は注意 ● Viewなど複雑な参照関係に注意 ● 怪しいと思ったら変数にnullを代入 ● 弱参照を使う(GCにも弱参照はある)
42.
クロージャに気をつけよう クロージャとは? wikipedia(http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%
BC%E3%82%B8%E3%83%A3)より引用 䜽䝻䞊䝆䝱䠄䜽䝻䞊䝆䝱䞊䚸ⱥ: closure䠅䚸㛵ᩘ㛢ໟ䛿䝥䝻䜾䝷 䝭䞁䜾ゝㄒ䛻䛚䛡䜛㛵ᩘ䜸䝤䝆䜵䜽䝖䛾୍✀䚹䛔䛟䛴䛛䛾ゝㄒ 䛷䛿䝷䝮䝎ᘧ䜔↓ྡ㛵ᩘ䛷ᐇ⌧䛧䛶䛔䜛䚹ᘬᩘ௨እ䛾ኚᩘ䜢 ᐇ⾜䛾⎔ቃ䛷䛿䛺䛟䚸⮬㌟䛜ᐃ⩏䛥䜜䛯⎔ቃ䠄㟼ⓗ䝇䝁䞊 䝥䠅䛻䛚䛔䛶ゎỴ䛩䜛䛣䛸䜢≉ᚩ䛸䛩䜛䚹 => 㛵ᩘእ䛾ኚᩘ䛜⏝䛷䛝䜛䝷䝮䝎ᘧ
43.
クロージャに気をつけよう 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䜘䜚 䚷㔜」䛧䛯㛵ᩘ䜃ฟ䛧䛜䛒䜛
44.
クロージャに気をつけよう 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; } 䛣䜜䛿䛷䛝䛺䛔
45.
クロージャに気をつけよう 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; } ᫂♧ⓗ䛻䜻䝱䝥䝏䝱䛧䛺䛡䜜䜀䛺䜙䛺䛔 䚷=> 䜽䝻䞊䝆䝱䛿እ㒊ኚᩘ䜈䛾ཧ↷䜢ᣢ䛴
46.
クロージャに気をつけよう 昔、RequestHelperにも クロージャによる循環参照があった。
47.
クロージャに気をつけよう
48.
クロージャに気をつけよう 䜽䝻䞊䝆䝱ෆ䛷䜽䝻䞊䝆䝱⮬㌟䜢ཧ↷ 䚷->
䝁䞁䝟䜲䝷䛻䜒㆙࿌䛥䜜䛶䜛
49.
クロージャに気をつけよう
50.
クロージャに気をつけよう
51.
クロージャに気をつけよう
52.
クロージャに気をつけよう 循環参照!
53.
C#のイベントに気をつけよう C#のイベントは強参照のコレクション Viewに登録することが多い
イベントにはクロージャを登録できる => リークしやすい view.onClick += (Event e) { // ……. }
Download now