new Calc(7,3).divInt()実行前

Slides:



Advertisements
Similar presentations
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Advertisements

1 Reference, 配列,アクセスフラ グ, jdb での観察, アセンブラ上での編集 2002 年 6 月 6 日 海谷 治彦.
プログラミング第5回 1 while ループ 文字列の操作
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
クラスファイルの構造解析(1) 2002年6月16日 2003年6月8日 改訂 海谷 治彦.
アルゴリズムとプログラミング (Algorithms and Programming)
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
コンパイラ 2011年11月24日
アルゴリズムとプログラミング (Algorithms and Programming)
Java2セキュリティ, クラスローダー,ベリファイア
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第4回放送授業.
例外,並行・同期処理,ゴミ集め 2002年7月7日 海谷 治彦.
第20章 Flyweight ~同じものを共有して無駄をなくす~
Bridge Pattern
オブジェクト指向入門.
コンパイラ 2012年11月19日
進捗 Javaバイトコード変換による 細粒度CPU資源管理
~手続き指向からオブジェクト指向へ[Ⅱ]~
実行時のメモリ構造(2) Javaスタック内動作他
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
アルゴリズムとデータ構造 2012年6月28日
アルゴリズムとデータ構造 2011年6月27日
独習Java ・ 8.1  例外処理 ・ 8.2  catch ブロックの検索  12月 5日    小笠原 一恵.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
コンパイラの解析 (3) クラスとインスタンスの初期化.
アスペクト指向言語による 例外処理の記述方法の改善
第11週:super/subクラス、継承性、メソッド再定義
Integer Java Virtual Machine
暗号技術 ~JAVAプログラム①~ (5週目)
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
クラスファイルの構造解析(2) 2003年6月23日 海谷 治彦.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
Javaバイトコード変換による 細粒度CPU資源管理 ~Progress Report for SWoPP2001~
Recoveryアドバイスをもつ アスペクト指向システム
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
バイトコードを単位とするJavaスライスシステムの試作
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向プログラミングと開発環境
オブジェクト・プログラミング 第8回.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
JAVAバイトコードにおける データ依存解析手法の提案と実装
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Boostのスマートなポインタを使ってみる
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2013年7月1日
Javaスタック ヒープ (インスタンス置き場) <init> i1215 i1512 r= r= | locals | =4
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
さまざまなプログラミング言語, オンライン開発環境
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
プログラミング 2 静的変数.
Presentation transcript:

new Calc(7,3).divInt()実行前 Javaスタック main | locals | =4 0, 1, 2, 3 public static void main(String[] args){ int x=Integer.parseInt(args[0]); int y=Integer.parseInt(args[1]); int r=new Calc(x, y).divInt(); System.out.println(r); } ヒープ (インスタンス置き場)

new Calc(7,3).divInt() Javaスタック ヒープ (インスタンス置き場) main i73 x= y= .method public static main([Ljava/lang/String;)V .limit stack 4 .limit locals 4 aload_0 iconst_0 aaload invokestatic java/lang/Integer/parseInt(Ljava/lang/String;)I istore_1 iconst_1 istore_2 new Calc dup iload_1 iload_2 invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I istore_3 getstatic java/lang/System/out Ljava/io/PrintStream; iload_3 invokevirtual java/io/PrintStream/println(I)V return .end method Javaスタック main | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 i73 x= y= ヒープ (インスタンス置き場)

new Calc(7,3).divInt() Javaスタック ヒープ (インスタンス置き場) main <init> i73 dup iload_1 iload_2 invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I istore_3 Javaスタック main | locals | =3 0, 1, 2 <init> | stack | =2 0, 1 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 .method <init>(II)V .limit stack 2 .limit locals 3 aload_0 invokespecial java/lang/Object/<init>()V iload_1 putfield Calc/x I iload_2 putfield Calc/y I return .end method i73 x=7 y=3 ヒープ (インスタンス置き場)

new Calc(7,3).divInt() Javaスタック ヒープ (インスタンス置き場) main i73 x=7 y=3 | locals | =4 0, 1, 2, 3 new Calc dup iload_1 iload_2 invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I istore_3 | stack | =4 0, 1, 2, 3 i73 x=7 y=3 ヒープ (インスタンス置き場)

new Calc(7,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt i73 x=7 .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main divInt | locals | =4 0, 1, 2, 3 | locals | =1 new Calc dup iload_1 iload_2 invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I istore_3 | stack | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 i73 x=7 y=3 ヒープ (インスタンス置き場)

new Calc(7-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt x=7 y=3 .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main divInt | locals | =4 0, 1, 2, 3 | locals | =1 | stack | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x= y= i43 ヒープ (インスタンス置き場)

new Calc(7-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック .method <init>(II)V .limit stack 2 .limit locals 3 aload_0 invokespecial java/lang/Object/<init>()V iload_1 putfield Calc/x I iload_2 putfield Calc/y I return .end method main divInt | locals | =3 0, 1, 2 <init> | stack | =2 0, 1 | locals | =4 0, 1, 2, 3 | locals | =1 | stack | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 ヒープ (インスタンス置き場)

new Calc(7-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt x=7 y=3 .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main divInt | locals | =4 0, 1, 2, 3 | locals | =1 | stack | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 ヒープ (インスタンス置き場)

new Calc(7-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt divInt .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 ヒープ (インスタンス置き場)

new Calc(7-3-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt divInt | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 x= y= i43 ヒープ (インスタンス置き場)

new Calc(7-3-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt divInt | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =3 0, 1, 2 <init> | stack | =2 0, 1 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 x=1 y=3 i43 ヒープ (インスタンス置き場)

new Calc(7-3-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt divInt | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 x=1 y=3 i43 ヒープ (インスタンス置き場)

new Calc(7-3-3,3).divInt() Javaスタック ヒープ (インスタンス置き場) main divInt divInt | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 int divInt(){ if(x<y){ return 0; }else{ return new Calc(x-y, y).divInt()+1; } x=7 y=3 i73 x=4 y=3 i43 x=1 y=3 i43 ヒープ (インスタンス置き場)

return 0 Javaスタック ヒープ (インスタンス置き場) main divInt divInt x=7 y=3 i73 x=4 .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 x=1 y=3 i43 ヒープ (インスタンス置き場)

return new Calc(7-3-3,3).divInt()+1 0+1 .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main | locals | =1 divInt | stack | =4 0, 1, 2, 3 | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 x=1 y=3 i43 ヒープ (インスタンス置き場)

return new Calc(7-3,3).divInt()+1 0+1+1 .method divInt()I .limit stack 4 .limit locals 1 aload_0 getfield Calc/x I getfield Calc/y I if_icmpge Label1 iconst_0 ireturn Label1: new Calc dup isub invokespecial Calc/<init>(II)V invokevirtual Calc/divInt()I iconst_1 iadd .end method Javaスタック main | locals | =4 0, 1, 2, 3 | stack | =4 0, 1, 2, 3 x=7 y=3 i73 x=4 y=3 i43 x=1 y=3 i43 ヒープ (インスタンス置き場)

感想 はしょった割には,結構疲れた. 今回の例は,Calc().divInt() 等,インスタンスを変数に保持しないプログラムとなっている. よって,インスタンスのリファレンスは,インスタンスメソッドのローカル変数0番以外は,スタックからしか参照してない.