gcj/16


gcj

16. staticフィールド

staticフィールドの初期化とGCへの登録をサポートする。

変化を観察

int → static int

public class A {
	int a;
}
$ gcj -S A.java
$ mv A.s A-1.s
public class A {
	static int a;
}
$ gcj -S A.java
$ mv A.s A-2.s
$ diff -u A-1.s A-2.s
+.globl __ZN1A1aE
+	.bss
+	.align 4
+__ZN1A1aE:
+	.space 4
(中略)
-	.long	8
+	.long	4
+	.word	1

int → Object

public class A {
	static Object a;
}
$ gcj -S A.java
$ mv A.s A-3.s
$ diff -u A-2.s A-3.s
-	.long	__Jv_intClass
+	.long	__ZN4java4lang6Object6class$E

初期化

public class A {
	static int a = 1234;
}
$ gcj -S A.java
$ mv A.s A-4.s
$ diff -u A-2.s A-4.s
+__ZN1A18__U3c_clinit__U3e_Ev:
+.stabn 68,0,1,LM3-__ZN1A18__U3c_clinit__U3e_Ev
+LM3:
+LFB3:
+	pushl	%ebp
+LCFI3:
+	movl	%esp, %ebp
+LCFI4:
+.stabn 68,0,2,LM4-__ZN1A18__U3c_clinit__U3e_Ev
+LM4:
+	movl	$1234, __ZN1A1aE
+.stabn 68,0,1,LM5-__ZN1A18__U3c_clinit__U3e_Ev
+LM5:
+	popl	%ebp
+	ret

<clinit>

どこかにテーブルやフラグの類がないか調査。

<clinit>を探して実行

リフレクション

Class.cpp

staticフィールドをGCに登録

手動sms_gc_register()から解放される。

javalang.cpp(追加)

class java::lang::VMClassLoader : public ::java::lang::Object {
public:
	static void initialize() {
		_Jv_voidClass   .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_booleanClass.vtable = JV_PRIMITIVE_VTABLE;
		_Jv_byteClass   .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_charClass   .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_shortClass  .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_intClass    .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_longClass   .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_floatClass  .vtable = JV_PRIMITIVE_VTABLE;
		_Jv_doubleClass .vtable = JV_PRIMITIVE_VTABLE;
	}
};

fields

Class.cpp

ここまでの作業結果: fileJAVAde3D-2-fix.zipgcj/JAVAde3D

MENU

now: 4

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2678, today: 2, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3885d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.028 sec.