[解決済み] Java言語では利用できないバイトコード機能
質問
現在(Java 6)、Javaバイトコードでできることで、Java言語内からできないことはありますか?
どちらもチューリングコンプリートだと思いますが、"can do" を "can do significantly faster/better, or just in the different way" と読み替えてください。
私が考えているのは、以下のような余分なバイトコードです。
invokedynamic
その特定のものが将来のバージョンであることを除いて、Javaを使って生成することはできません。
解決方法は?
私の知る限り、Java 6でサポートされるバイトコードには、Javaのソースコードからもアクセスできないような主要な機能は存在しません。その主な理由は、明らかに、JavaバイトコードがJava言語を念頭に置いて設計されているからです。
しかし、最新のJavaコンパイラでは生成されない機能もあります。
-
は
ACC_SUPER
フラグ :これは、クラスに設定可能なフラグで、特定のコーナーケースの
invokespecial
のバイトコードは、このクラスで処理されます。これは、すべてのモダンなJavaコンパイラ(私の記憶が正しければ、 "modern"は >= Java 1.1 )によって設定され、古いJavaコンパイラだけがこれが設定されていないクラスファイルを作成しました。このフラグは後方互換性のためにのみ存在します。Java 7u51から、ACC_SUPERは、セキュリティ上の理由で完全に無視されることに注意してください。 -
は
jsr
/ret
バイトコードです。これらのバイトコードは、サブルーチンの実装(主に
finally
ブロック)。それらは Java 6以降、生成されなくなった . 非推奨の理由は、静的検証を非常に複雑にしてしまい、大きな効果が得られないからです(つまり、使用するコードはほとんど通常のジャンプで再実装でき、オーバーヘッドもほとんどありません)。 -
戻り値の型が異なるだけの2つのメソッドをクラス内に持つこと。
Java言語仕様では、同じクラスにある2つのメソッドが のみです。 は、その戻り値の型(すなわち、同じ名前、同じ引数リスト、...)です。しかし、JVMの仕様には、そのような制限がないので、クラス・ファイル できる このようなメソッドが2つ含まれていても、通常のJavaコンパイラでそのようなクラスファイルを作成する方法はありません。このようなクラスファイルは、通常のJavaコンパイラでは作成できません。 この回答 .
関連
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] Javaで現在のスタックトレースを取得するにはどうすればよいですか?
-
[解決済み] Androidで実現するJava 7の言語機能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
linux run jarfile Invalid or corrupt jarfile error.
-
Javaエラーメッセージがenclosingクラスでない
-
HttpClientがGZIP形式でない場合の対処法
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] invokedynamicとは何ですか、どのように使用するのですか?