InfoQ Software Architects' Newsletter A monthly overview of things you need to know as an architect or aspiring architect. View an example
![Java Virtual Threads: A Case Study](https://cdn-ak-scissors.b.st-hatena.com/image/square/7a5cf57a4774e0c9e825029c1ef06c727ce06610/height=288;version=1;width=512/https%3A%2F%2Fres.infoq.com%2Farticles%2Fjava-virtual-threads-a-case-study%2Fen%2Fheaderimage%2Fjava-virtual-threads-header-logo-1720447061699.jpg)
Published Wednesday, Jul 12, 2023 - 2181 words, 11 minutes Lately I’ve been spending quite a bit of time learning Rust, and as any sane person would do, after writing a few 100 lines programs I’ve decided to take on something a little bit more ambitious: I have written a Java Virtual Machine in Rust. 🎉 With a lot of originality, I have called it rjvm. The code is available on GitHub. I want to st
2023/03/30 にやったJava仕様勉強会の動画が公開されました。当日はJavaのマスコットDuke風の服で臨みました(どうでもいい裏情報) www.youtube.com セッション資料もアップロードしたので参考にしてください。 Project Valhalla 2023 中間報告 いずれも 2023年3月時点での情報です。JEPもドラフト版だったりするので、将来的に変更が入る可能性が高いことをお断りしておきます。本稿では勉強会のセッション内容に加えて、セッション時点で追従できていなかった変更点や、勉強会での指摘を踏まえてフォローアップした内容を含みます。 もしもValhalla世界でJava入門したら ここでは、Valhalla導入後のJava世界だと入門者視点でどのように変わるのかというアプローチをしています。まず、Javaのデータ型は大きくふたつに分類できて、Identity
ビルド時アプローチの利点は明らかです。コンパイル中により多くの計算を行うことにより、フレームワークはその時点で最適な方法で実行できるように準備されます。また、リフレクション、動的なクラスローディング、プロキシの実行時生成を排除することで、実行フェーズにおけるさらなる最適化の機会が得られます。この最適化は、JITと、非常に重要な点として、GraalVMのNative Imageツールの両方に対して得られます。このアプローチのおかげで、Native Imageでは、Micronautフレームワークアプリケーションのクローズドワールド静的分析を実行するために追加で設定することはありません。 MicronautフレームワークとGraalVMの間のこの相乗効果を生み出すため、Micronautフレームワークの共同創設者であるGraeme Rocher氏がOracle Labsに加わりました。Orac
これは、ネイティブJavaが本当に輝くところです... スイートスポットを見つける ネイティブJavaは、Kubernetes、マイクロサービス、サーバレスコンポーネントに最適です。また、新しいサービスを開発したり、より大きなモノリスアプリケーションをより小さなサービスに分解したりする場合にも理想的なタイミングです。 ネイティブJavaの採用に「ビッグバン」アプローチをとる必要はありません。一度に1つのサービスで実行できます。このアプローチによりリスクが最小限に抑えられます。そして、テクノロジーが時間の経過とともに成熟するにつれて信頼を築いていくでしょう。 行動を起こすことに最初は圧倒されるかもしれませんが、今行われている従来のJava開発とそれほど変わりません。 Logicdropは、ビジネス自動化とデータインテリジェンスのためのオールインワンプラットフォームを開発しています。このプラッ
元・Java専門記者がLog4j 2脆弱性に見た「複雑性と魔神のかけら」 Javaの歴史とバザールの矛盾(1/6 ページ) Javaのライブラリ「Apache Log4j 2」に深刻な脆弱性が発見されたことは記憶に新しい。1カ月以上経過した現在も、注意喚起や新たな情報提供が続いている。問題は完全に収束したとはいえない。 今回の記事の主題は脆弱性対策ではない。「Javaの歴史的経緯と、今回騒ぎになっている脆弱性の話を、うまく1本の記事にしてください」という編集部のオファーに応じて書いたものだ。記事の半分は「元・Java専門記者のナイショ話」である。現実の情報システムへの対処が必要な方は、まず下記ページから最新情報をチェックしていただきたい。 IPA Apache Log4j の脆弱性対策について(CVE-2021-44228) Apache Log4j 2公式ページ Log4j 2で今回問題
haskell-scala-java ちょっと前までScalaを書いていたので、 Haskell好きな人がScalaを書いた感想を書きます。 タイトルは経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blogの模倣です。 あくまで1ユーザの感想です。 Scalaに慣れてしまうと違和感を忘れてしまうと思ったので、当時箇条書きで雑にメモしていたものを参照して書いています。 逆にScala使いがHaskellを知るメモに役立つかもしれません。 Haskell歴 when: 2013年から知って学び始めましたが、本格的に使い始めたのは2015年からで、5年ほど使っています where: どの言語を使っても良くて新しい言語を学ぶ必要がなければ基本的にHaskellを使っています what: 趣味OSSプロジェクトの大半 現在一番スターもらっ
Helidon SEの関数スタイルを、WebServerインターフェースを使ってHelidon Webサーバを起動するという、ごく単純な例を使って見ていきましょう。 WebServer.create( Routing.builder() .get("/greet", (req, res) -> res.send("Hello World!")) .build()) .start(); この例を出発点に、ダウンロード用サーバアプリケーションの一部として、本当のstartServer()メソッドを段階的に開発する中で、Helidon SEの3つのコアコンポーネントを探っていきたいと思います。 webサーバコンポーネント NodeJSや他のJavaフレームワークにヒントを得たHelidonのWebサーバコンポーネントは、Netty上で動作する非同期かつリアクティブなAPIです。WebServer
Java 15が2020/9/15にリリースされました。 https://mail.openjdk.java.net/pipermail/announce/2020-September/000291.html Java SE 15 Platform JSR 390 JDK 15 GA Release こちらの動画でざっくりと説明しています。 MacやLinuxでのインストールにはSDKMAN!をお勧めします Oracle OpenJDK以外に無償で商用利用できるディストリビューションとしては、次のようなものがあります。 AdoptOpenJDK Azul Zulu Community Liberica JDK Amazon Corretto 15 アップデートは10月に15.0.1が、翌年1月に15.0.2がリリースされることになります。 Oracle JDKは開発用途には利用できますが、
クラスまたはインタフェースはsealedと宣言されている場合があります。これは特定のクラスやインタフェースの集合だけがそれを直接拡張できることを意味します。 sealed interface Shape permits Circle, Rectangle { ... } これは Shape と呼ばれる Sealed インタフェースを宣言します。permits リストは、Circle と Rectangle だけが Shape を実装できることを意味しています。(場合によっては、コンパイラが permits 句を推論できるかもしれません)。 Shape を拡張しようとする他のクラスやインタフェースは、コンパイルエラーを受けます(または、Shape をスーパータイプとして宣言しているラベル外のクラスファイルを生成しようとした場合は、実行時エラーとなります)。 私たちは、final クラスを介し
このようなコンピューティングにおける新しい異種デバイスの中には、マルチコアCPU、GPU(Graphics Processing Unit)、FPGA(Field Programmable Gate Array)などがあります。多様性はすばらしいことですが、これら新しいデバイスを効率的にプログラムする方法が必要です。 その最たるものとして挙げられるのが、ヘテロジニアス(異種)プログラミング言語の代表格である、CUDAとOpenCLの2つです。しかしこれらの言語では、APIに低レベルな機能が現れているため、専門家でないユーザが使うには非常に難しいものになっています。その例として、OpenCL 3.0標準の中から次の一節を引用してご紹介しましょう。 OpenCLが対象とするのは、ポータブルかつ効率的なコードの記述を望む専門的プログラマです。[...] 従ってOpenCLでは、低レベルのハードウ
参照カウントは、オブジェクト毎のメタデータをプログラム実行に沿って(例えば、参照タイプのフィールドに新たな値を設定する時に)更新することで動作します。メタデータ更新に必要な処理はアプリケーションスレッドで行われるので、独立したアクティビティとして明確に分離することはできません。 実践的なGCアルゴリズムはGC roots — 有効(live)であることが分かっているオブジェクトのセット — から始まり、ポインタを追って有効なオブジェクトをすべて決定することで進行します。 このようなトレーシングコレクタ(tracing collector)では、グラフ理論アルゴリズムを実装することによって、ヒープメモリを有効なものと再利用可能(reclaimable)なものとに分割します。 現代的なGCの文脈においては、コンカレント(concurrent)とパラレル(parallel)が、いずれもコレクショ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く