忍者ブログ
[35] [34] [33] [32] [31] [30] [29] [28] [27] [26] [25]

DATE : 2017/10/21 (Sat)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/04/21 (Fri)

Java では、プリミティブ型として byte, short, int, long, float, double, char, boolean が用意されています。

そして、byte は1バイト幅、short は2バイト幅、int は4バイト幅――と、プリミティブ型のバイト幅は決まっています。

しかし、『Java 仮想マシン入門 Returns(2) バイトコード編1』の『データ型』の項によると、byte, short, boolean は実行時には int 型として扱われるそうです。また、int 型用の命令で処理されることが多いようです。

実際に『Java 仮想マシン仕様』(英語)を覗いてみると、『3.11.1 Types and the Java Virtual Machine』にそれらしき記述が見つかりました。

また、『型変換』の項によると、int 型で扱われている byte などの型は、値の範囲を合わせるために int → byte などへの型変換が行われるものの、再び int 型として扱われるそうです。

ここから、int 型に代わって byte 型や short 型を使ってメモリ消費を抑えようとしても、ほとんど無意味なことが分かります。むしろ、int 型から byte 型などへの変換が内部で行われる(そして再び int 型として扱われる)ため、無駄な処理を行っていることになります。

なお、『Java 仮想マシン入門 Returns(5) バイトコード編4』の『newarray』の項によると、配列に限っては、実行時に確保される配列が実装によって変わるそうです。例えば、boolean 型の配列は、ある仮想マシンでは int 配列として、別の仮想マシンでは byte 配列として確保するようです。

再び『Java 仮想マシン仕様』の『3.3.4 The boolean Type』を覗いてみると、 JDK 1.0, 1.1、Java 2 SDK 1.2 では boolean 型の配列は byte 配列として確保していたようです。この仕様書は Java 2 登場当時のものですから、今の JDK も byte 配列で確保しているのかもしれません。

参考文献

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
09 2017/10 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
09 2017/10 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)