Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons



All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 1 (more)

Javaメモリ勉強会

From tencho, 5 months ago

Java のメモリについて、2007/07/23 にアプレッソ社 more

2444 views  |  0 comments  |  1 favorite  |  10 downloads
 

Tags

java memory

 
 

Groups/Events

Not added to any group/event

 
 

Privacy InfoNew!

This slideshow is Public

 
Embed in your blog
Embed (wordpress.com)
custom

Slideshow Statistics
Total Views: 2444
on Slideshare: 2444
from embeds: 0* * Views from embeds since 21 Aug, 07

Slideshow transcript

Slide 1: メモリ勉強会 開発本部 吉田 哲也 2007/07/23

Slide 2: Java 仮想マシン仕様より • Java 仮想マシン・スタック • ヒープ • メソッド・エリア • 実行時コンスタント・プール • ネイティブ・メソッド・スタック

Slide 3: メモリモデルの概要 Java プロセスのメモリ領域 ヒープ領域 Java メソッド ネイティブ 仮想マシン エリア メソッド インスタンス スタック スタック スレッド 1 用 クラス C 言語 スレッド 1 クラス スレッド 2 用 インスタンス スレッド 2 “abc” “def” スレッド 3 用 スレッド 3 -Xmx -Xss -XX:MaxPermSize

Slide 4: Java 仮想マシン・スタック • 他のプログラミング言語におけるスタック • フレームが格納される • フレームは下記を格納するためのもの – ローカル変数 – 中間的なデータ – メソッドの起動 – メソッドの戻り値 – 例外のディスパッチ • 各スレッド毎に生成され、スレッド終了時に破棄される • 固定でも動的に拡張・縮小してもよい • ヒープ上に割り当てることも可能 – Sun JRE ではヒープ上には割り当てられていない??

Slide 5: Java 仮想マシン・スタック • 最大サイズ・最小サイズをユーザに指定させても良い – サイズ : -Xss ( 例 : -Xss1024) ※ 大きすぎる値 (2MB 以上 ) を指定するとパフォーマンスが 大幅に遅くなる可能性あり ※ BEA Web サイトより – デフォルト : 512KB (1.4 以前で 1.5 は要調査 ) • -server と -client によっても若干異なる • 許容量を超える Java 仮想マシン・スタックが要求さ れた場合には StackOverflowError がスローされる • Java 仮想マシン・スタック拡張時にメモリが確保でき なかった場合には OutOfMemoryError がスローされる

Slide 6: 質問 : スタック public static void main(String[] args) { StackOverFlowTest test = new StackOverFlowTest(); test.execute(); } private void execute() { execute(); }

Slide 7: ヒープ • 全てのインスタンスや配列が格納される • スレッドで共有される • 自動記憶管理システム (GC) によって回収される – 明示的にインスタンスが回収されることはない • 自動記憶管理システム (GC) アルゴリズムは Java 仮想マシン仕様では特 定しない – Java 仮想マシン実装者が選択可能 • 固定でも動的に拡張・縮小してもよい • 最大サイズ・最小サイズをユーザに指定させても良い – 最大 : -Xmx ( 例 : -Xmx1024m) – 最小 : -Xms ( 例 : -Xms1024m) – デフォルト (Sun JRE 1.5.x): • 最小 : マシンの物理メモリの 1/64 か、妥当な最小サイズかの大きい方。 簡単にテス トしたところ 7MB くらいでした。 • 最大 : 物理メモリの 1/4 か、 1GB かの小さい方。 • 自動記憶管理システムが確保できるよりも大きなヒープが必要になった場 合には OutOfMemoryError がスローされる

Slide 8: メソッド・エリア • 下記のものを格納する領域 – 実行コンスタント・プール – クラス毎の構造 • フィールド • メソッド • コンストラクタ • 別名パーマネント領域とも言う • スレッドから共有される • 論理的にはヒープの一部 – Sun の JRE ではヒープの一部となっていないようです – -Xmx を大きくすると – XX:MaxPermSize が取れません • 固定でも動的に拡張・縮小してもよい • 最大サイズ・最小サイズをユーザに指定させても良い – 最大 : -XX:MaxPermSIze ( 例 : -XX:MaxPermSize=128m) – 最小 : -XX:PermSize ( 例 : -XX:PermSize=128m) – デフォルト (Sun JRE): • 最大 : 64MB • 最小 : 1MB

Slide 9: 質問 : クラスが GC の対象となるため には? • ユーザ定義クラスローダによりロードさ れたクラス • ユーザ定義クラスローダへの参照がなく なった

Slide 10: 実行コンスタント・プール • クラス毎、インタフェース毎に存在 • コンパイル時に決定される定数 – 数値リテラル – 文字列リテラル • “aaa” のようにコンパイル時に決定される文字列 • 実行時に解決しなければならないメソッドやフィールド の参照 – クラスの構造体のようなもの • メソッド・エリアから割り当てられる • 実行時コンスタント・プールの構築に必要なメモリ容量 がメソッド・エリアで利用可能なメモリ容量よりも大き い場合には OutOfMemoryError がスローされる

Slide 11: 質問 : 文字列リテラル • “abc” == new String(“abc”) → false • StringBuilder buf = new StringBuilder(); buf.append(“abc”); “abc” == buf.toString() → false • “abc” == new String(“abc”).intern() → true • StringBuilder buf = new StringBuilder(); buf.append(“abc”); “abc” == buf.toString().intern() → true

Slide 12: 文字列リテラル • 文字列リテラル – String str = “a”; • 文字列リテラルではない – new String(“aaa”); – Stream から呼んできたデータを文字列化 – StringBuffer および StringBuilder から生成した文字 列 • String#intern() メソッドは、実行コンスタント ・プールにあるかどうかをチェックし、あれば 実行コンスタント・プールにある文字列の参照 を返し、なければ実行コンスタント・プールに プールして、その参照を返す。

Slide 13: ネイティブ・メソッド・スタッ ク • native メソッドの実行を行うためのスタック • 一般的にはスレッド毎に割り当てられる • 固定でも動的に拡張・縮小してもよい • 許容量を超えるネイティブ・メソッド・スタッ ククが要求された場合には StackOverflowError がスローされる • ネイティブ・メソッド・スタック拡張時にメモ リが確保できなかった場合、新規スレッド用の ネイティブ・メソッド・スタックが生成できな かった場合には OutOfMemoryError がスロー される

Slide 14: 質問 : メモリモデルの概要 Java プロセスのメモリ領域 ヒープ領域 Java メソッド ネイティブ 仮想マシン エリア メソッド インスタンス スタック スタック スレッド 1 用 クラス C 言語 スレッド 1 クラス スレッド 2 用 インスタンス スレッド 2 “abc” “def” スレッド 3 用 スレッド 3 Windows 32bit の場合の最大メモリ容量は? → 2GB です

Slide 15: jvmstat • http://java.sun.com/performance/jvmstat/ • Windows で使用する場合には若干の変更 が必要 • 変更方法は SNS に書いています。