CheerpJ 3.0 AMA に参加する
発表できることを嬉しく思います アレッサンドロ.
ライブを開催します 何でも聞いてください (AMA) CTO およびリード開発者と主なトピックは CheerpJ 3.0ただし、WebAssembly、コンパイラ、または会社全般について、すべての製品に関するご質問を歓迎します。 CheerpJ 3.0 の開発、リリース タイムライン、および 3.0 のアーキテクチャが 2.0 とどのように異なるかなどの技術的な詳細について説明します。
当日はぜひご視聴いただき、ご質問がございましたらお気軽にお問い合わせください。
イベント開始時に通知を受け取るには、 ディスコードサーバー
TLDR: ここ 1 年間、私たちは CheerpJ の新しいアーキテクチャに取り組んできました。これは、ブラウザ上で Java アプリケーションを実行するように設計された、HTML5/WebAssembly での JVM の実装です。 CheerpJ 3.0 は 2023 年の夏の終わりにリリースされる予定で、これまでよりも使いやすく、高速で、互換性が高くなります。私たちのライブ Javaフィドル デモはすでに現在の開発バージョンに移行されています。
CheerpJ は、ブラウザ内で大規模な未変更の Java アプリケーションおよびアプレットを実行するための Leaning Technologies のソリューションです。実行は完全にクライアント側で行われ、標準の HTTP サーバー以外にサーバー側のコンポーネントは必要ありません。過去数年間にわたり、これは商業的にだけでなくコミュニティにおいても最も成功を収めた製品であり、世界中で 100,000 人を超えるユーザーがいます。
CheerpJ の成功は、最小限の労力で実際の Java アプリケーションを効率的に実行できることに由来しており、これは従来のクライアント側 Java アプリケーションの寿命を延ばすのに非常に役立ちます。これは、いくつかの機能によって可能になります。
- ソースコードは必要ありません: CheerpJ はソース コードにアクセスする必要はまったくなく、.class ファイルおよび .jar ファイル内の Java バイトコード レベルで動作します。サードパーティのライブラリ、依存関係、および難読化されたコードは問題を引き起こしません。
- 高度な Java 機能のサポート: 実際の Java アプリケーションと OpenJDK ランタイム自体は、リフレクション、マルチスレッド、ランタイム生成クラス (ラムダ/invokedynamic およびプロキシの実装に使用) を利用します。 CheerpJ はこれらすべてを完全にサポートしており、アプリケーションを調整する必要はありません。
- OpenJDK の互換性: CheerpJ は未変更の OpenJDK 環境に基づいており、ネイティブ JVM と比較してブラウザ上で同じ動作を保証します。ファイルシステム、ネットワーク、印刷、クリップボード、その他多くのサブシステムがシームレスに動作することを保証するための多くのエミュレーション層が含まれています。
なぜ新しいアーキテクチャが必要なのでしょうか?
私たちは CheerpJ の現行バージョンで達成した結果を誇りに思っていますが、長年にわたって、技術的能力と使いやすさの両方の点で、特に次のようないくつかの欠点が明らかになりました。
- 実行モデル: パフォーマンスを実現するために、CheerpJ には、元のアプリケーションの .jar ファイルごとに最適化された .jar.js を生成する AOT コンパイラーが含まれています。これらのファイルは、実行時に CheerpJ によって対応する .jar ファイルとともにロードされ、実行を高速化するために使用されます。このモデルは、理解、導入、統合が難しいことが判明しました。 CI セットアップの後処理ステップとして CheerpJ を追加する必要性は、望ましくない負担として感じられることが多く、エンタープライズ ユーザーの多くは、管理された環境で実際の AOT コンパイラ バイナリを実行するのが難しいと感じていました。
- ClassLoader の限定的なサポート: Java クラス名のバイトコードへの解決は、実行時に ClassLoader を介して完全に制御できます。 AOT コンパイル モデルは、このレベルの柔軟性と実際には互換性がありません。実際のアプリケーション、特に複雑なフレームワークに基づくアプリケーションでは、これは予想よりも重大な制限であることが判明しました。 AOT コンパイル モデルは、複数の jar 内で複製されたクラスを扱う場合にも脆弱であり、これはログ ライブラリ (log4j、slf4j) では非常に一般的です。
- 起動時間とダウンロードサイズ: Java アプリケーションは依存関係をかなり自由に追加する傾向があり、実行時に使用するクラスはほんの数個で、.jar 全体を配布する場合もあります。現在の CheerpJ モデルでは、これにより多くの jar および jar.js ファイルが実行時にダウンロード、解析、実行されることになり、アプリケーションの起動が遅くなります。
- ランタイム サポートは Java 8 に限定されます。 CheerpJ で Java 9 以降のランタイム バージョンのサポートを追加する際の主な障害は、Java の「ネイティブ」メソッド (JNI 経由) の実装であり、ランタイムの追加バージョン/サブバージョンごとにかなりの繰り返しの作業が必要になるでしょう。
CheerpJ 3.0 アーキテクチャ: WebAssembly における JVM の完全な置き換え
私たちは、ブラウザベースの x86 仮想マシンである CheerpX から学んだ教訓を活用しながら、CheerpJ アーキテクチャをゼロから再設計することで、これらすべての問題を解決するための総合的なアプローチを取ることにしました。
新しい CheerpJ アーキテクチャの主な機能は次のとおりです。
- さようならAOT、こんにちはJITコンパイル: CheerpJ 3.0 は、完全に透過的な多層実行モデルを特徴としており、めったに使用されないコードの高速インタープリターから始まり、頻繁に使用されるコードの JIT コンパイラーを組み合わせます。この新しいモデルでは、未使用のクラスに対してコードが実行または生成されることがなくなり、起動パフォーマンスが向上します。 AOT コンパイラや .jar.js ファイルがないため、CheerpJ 3.0 の統合と展開は、既存の HTML ページに数行を追加するだけで済みます。
- クラスローダーの完全なサポート: JVM の通常の動作を模倣する新しい JIT アプローチのおかげで、アプリケーションが提供するクラスローダーを含む、クラス解決のために適切なクラスローダーに完全な制御を与えることができるようになりました。これにより、クラスの重複によって生じる非互換性も完全に排除されます。
- 新しいスケーラブルな JNI アーキテクチャ: 現在、OpenJDK ネイティブ コードの 100% を WebAssembly にコンパイルし、Java の最新バージョンと、ユーザーが必要とする場合に特定のポイント バージョンをサポートするための実行可能なパスを提供します。これは、CheerpJ が完全に変更されていないバージョンの OpenJDK を使用するようになり、互換性のレベルがさらに拡張されたことも意味します。
これらのアーキテクチャの進歩のおかげで、CheerpJ 3.0 は、完全な OpenJDK ランタイムを備えた JVM の完全な WebAssembly ベースの代替品と考えることができます。
次のステップ
CheerpJ 3.0 は現在まだ開発中ですが、すでに十分に安定しているので、 Javaフィドル デモ: ブラウザで Java コードをコンパイル、実行、共有するための完全なクライアント側環境。このデモは、Java コンパイラー自体が Java で書かれているため、CheerpJ でも実行できるという事実を利用しています。
CheerpJ 3.0 は 2023 年の夏後半に正式にリリースされる予定であり、リリースに向けてさらなる発表が行われる予定です。私たちは、このテクノロジーに非常に興奮しています。それは、既存の Java アプリケーションをブラウザーに移行する実証済みの機能だけでなく、Web 開発のクライアント側言語として Java に与える可能性のある影響にも当てはまります。
私たちのチームはいつでもご質問いただけます。 不和.
私たちに従ってください CheerpJ を含むすべての製品に関する最新情報を入手するには、Twitter をご覧ください。
詳細については: https://leaningtech.com