2009-08-26 7 views
0

私が合格した場合ことを、知っている:メソッドに引数を渡すときに実行される操作は何ですか?

  • プリミティブ型、そして要素のコピーを参照のコピー、その後、
  • オブジェクトタイプが送信されます

が送信されます私は(してくださいと仮定)確認:

  • 参考サイズは、オブジェクト要素サイズと等しい
  • オブジェクトのサイズは、すべての合計でありますプリミティブ型が異なる場合、結果の型は常に少なくとも2つの型の中で最も幅が広い。

私は私が合格した場合に何が起こるかわからない:

  • 'NULL'(空の参照?)
  • オブジェクトタイプが異なる(第1の共通の親?)(発見されたことをどのように? )
  • 列挙型(int型のコピー?)
  • 匿名クラス
+2

少し夜間の読書資料です:http://java.sun.com/docs/books/jvms/これは上記の – ChssPly76

+0

Tyのすべてに答える必要があり、非常にいいリンクでした。 – Margus

答えて

5

あなたは、メモリ内のメソッド呼び出しについて話している場合(とRMIなどではない)、すべての参照のサイズは同じです。それらはヒープ上のオブジェクトへのハンドルです。オブジェクトのサイズが何であるかは関係ありません。

コードをコンパイルできると仮定すると、プリミティブ型は何らかの方法で呼び出し元のメソッドと一致します。明示的なキャスト、またはあなたが何をしているかに応じて自動的に拡大するか(intを使ってlongメソッドを呼び出すか、longを持つintメソッドを呼び出すか)。

参照は、列挙型、異なるオブジェクト型(オブジェクトは同じ、型参照のみが異なる)、または匿名クラスとしてキャストされていても、常に同じです。どの場合も、ヒープ上のオブジェクトインスタンスへの参照です。

匿名クラス(または静的と宣言されていない内部クラス)は、その親に対する暗黙の隠れ参照を持ちます。

Nullは参照を表していないため、サイズについてはわかりませんが、JVMにはその内部表現がいくつかあります。私は実際にはメモリの量の点でオブジェクト参照よりも実際には小さいとは思っていませんが、特にJavaMEではそうかもしれません。

実際には、Java開発者はこれらのことについてはあまり考えないと指摘しておきます。 JVMを実装している人だけが、これらの問題(例えば、参照のサイズ)を気にするでしょう。言語については何もできません。そのためにパフォーマンスの問題がある場合は、別の言語を選択してください。

0

は、私はあなたが「基準サイズ」ポイントで探しているかわからないんだけど、ここで私はいくつかの確信を持って答えることができるいくつかある:プリミティブ型が異なる

場合、結果の型は常にあります少なくとも2つのタイプの中で最も広い。

は正しくありません。 intを指定してlongを渡すと、intにダウンキャストする必要があり、渡されるのはintです。バイトを渡すと、自動的にintにアップキャストされます。常にintを渡します。

オブジェクトのサイズは、関数ポインタのテーブルといくつかの他のものもあり、それは

が含まれているすべてのプリミティブと参照型のサイズの和である、私はそれが、この単純明快だとは思いません。

静的変数は、オブジェクトに含まれていない

私は、彼らがオブジェクトインスタンスに含まれていないと言うだろうが、私がいたそのポインタテーブル内のオブジェクトのインスタンスでそれらへのポインタ(があるかもしれません私はそうは思わない。

「NULL」(空の参照?)

あなたはそれがはるかにCのように動作しますnullを渡すとが、(私は「ヌル」を意味0またはいくつかの他の定義済みの悪い場所へのポインタを信じて)あなたはヌルにそれを比較するか、またはNPEを得ることを除いて、これにアクセスする必要はありません。あなたはCのように他の方法でそれを扱うことができません。

オブジェクトタイプは異なります(どうして見つけられますか?)

オブジェクトにはメタデータが格納されていますが、それはどのタイプであるかを伝えますが、もっと重要なことに、ポインタテーブルがあるため、呼び出す「正しい」メソッドは常にポインタの逆参照です。あなたが実際に持っているクラスを見つけ出し、 "Extends"ツリーをスキャンして、与えられたメソッドの最初の実装を見つける必要があります。代わりに、クラスがキャストされているかどうかにかかわらず、正しい "toString"あなたは使うべきです。

匿名クラス

これらは親のクラス名に基づいて、魔法の名前を与えられ、いくつかの特別な例外を除いて通常のクラスとしてコンパイルされています。

関連する問題