はじめに こんにちは、虎塚です。 この記事はJava Advent Calendar 2014 の22日目の記事です。昨日はすふぃあ (@empressia) さんの「JavaEEなWebアプリケーションを作ろうとしたときのお話: すふぃあの記憶」でした。 この記事では、「Javaクラスファイルの読み方・増補版」と題しまして、12月20日(土)に開催したJavaクラスファイル入門という勉強会でお話しした内容の補足をお届けします。なお、勉強会のターゲットは、 Javaプログラムは書いたことがあるけど、JVMのことは全然知らない Javaクラスファイルのバイナリを見たことがない といった初心者の方や新人さんでした。なので、Javaに興味さえあれば、どなたでもお読みいただける内容かと思います。 JVM仕様とは JavaとJVM Javaプログラム(.java)をコンパイルすると、中間コードと呼ば
これまでちゃんと使ったことがなかったRuntime#addShudownHookと、個人的にメモとして書き残しておきたいsun.misc.SignalHandlerについて、ちょっと書いておきます。 それぞれどんなものなのかですが、Runtime#addShutdownHookはJavaアプリケーションの終了時に実行させるThreadを登録することができるものです。これを使うことで、Javaアプリケーションの終了時に何らかの処理を実行することができます。まあ、いついかなる時も実行されるというわけではありませんが。 sun.misc.SignaHandlerは、sum.miscという推奨されないパッケージですが、Javaでシグナルを扱うことができる(シグナルハンドラを登録することができる)ようになります。 以下に、順に使っていってみましょう。 推奨は、Runtime#addShutdownH
やりたいこと JavaプログラムでaddShutdownHookに指定したThreadがどのシグナルで終了したときに呼び出されるのかを確認する。 Runtime (Java Platform SE 8) 確認方法 以下のJavaプログラムを実行する 起動したプログラムにkillコマンドでシグナルを投げて「call shutdown hook」が標準出力に出るか確認する。 public class SignalTest { public static void main(String [] args) { Runtime.getRuntime().addShutdownHook(new Thread( () -> System.out.println("call shutdown hook") )); while(true) { try { Thread.sleep(5000); Syste
Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。 この記事は、Red Hat Developerのブログ記事、Java 17: What’s new in OpenJDK's container awareness | Red Hat Developer の翻訳記事です。 OpenJDKは、以前からLinuxコンテナ(DockerやPodman、またKubernetesのようなコンテナオーケストレーションフレームワークなど)を意識してきました。コンテナ対応とは、OpenJDKがコンテナ内で動作していることを検出することを意味します。この記事では、コンテナ対応がなぜ有用なのか、OpenJDKのその領域で最近何が変わったのか、そして、開発者がJVMの設定決定方法について理解を深めるために利用できる診断
はじめに 先日、JakartaOne Live Japan 2022というイベントで登壇させていただく機会を頂きました。 QuarkusやHelidonのような新しめのEEフレームワークがこれまでのPayaraやWebLogicとどう違うのか? CloudRunのようなサーバレス環境でMicroProfileのどの機能が効果的に働くのか? という点を最近のWeb開発周りのトレンドと絡めながら話ました。上記のようにアーカイブ動画も公開されていますが、せっかくなのでQuarkusがサーバレス環境で実行に最適化されるまでの周辺事情等をまとめたいと思います。Javaだけに留まらず最近の環境事情の整理にも役立つかと思います。 TL;DR Quarkus/Helidonは軽量で高速な新しいEEフレームワーク コンテナや、サーバレス、クラウドネイティブなど最新のトレンドに基づいた設計 GCPのCloud
Googleは2022年9月7日(米国時間)、Javaプログラム用単体テストツール「JUnit」に対応したオープンソースのパラメーター化テストフレームワーク「TestParameterInjector」で「JUnit 5」(Jupiter)をサポートしたと発表した。 TestParameterInjectorは、もともとGoogleが社内で使っていたものだ。同社は2021年3月に、「JUnit 4」に対応したTestParameterInjectorのオープンソース版を公開している。 Google社内ではJavaプログラムのテストツールに何を使っているのか 関連記事 5分で分かるテスト自動化 現在のソフトウェア開発に欠かせない「テスト自動化」について、およそ5分でざっくり解説します。 基礎から学ぶ、テスト自動化――導入時に見極めたい、コストの損益分岐点 ソフトウェアテストにおける選択肢の一
Java 19が2022/9/20にリリースされました。 https://mail.openjdk.org/pipermail/jdk-dev/2022-September/006933.html 今回、正式導入された機能がほとんどありませんが、Record PatternsやVirtual Threadは注目すべき機能です。 こちらの配信で解説しています。 詳細はこちら JDK 19 Release Notes Java SE 19 Platform JSR 394 OpenJDK JDK 19 GA Release APIドキュメントはこちら Overview (Java SE 19 & JDK 19) 追加されたAPIまとめはこちら https://docs.oracle.com/en/java/javase/19/docs/api/new-list.html APIの差分はこちら。
仮想スレッド/ネイティブイメージ/CRaC/ノンブロッキングにも対応! msで起動しオンプレからサーバレスまで幅広く利用できる 軽量OSSフレームワークQuarkus
Javaでの開発をしている際に、Javaオブジェクト(インスタンス)のメモリサイズを把握したい場合があると思います。 そのような場合に役に立つツール群を以下に記載しました。 これらを使えば少しコードを書くだけで簡単にメモリサイズを取得することができます。 (以下に記載した(サンプルコードの)実行結果は、全て64bitのJRE環境下でのものとなります) java.SizeOf ■ツール(jar)の入手先 java.sizeOf project からダウンロードしてください ■主に使うAPI Javaオブジェクトのメモリサイズを取得するためには基本的に以下を使用します SizeOf#deepSizeOf ■サンプルコード サンプルコードは以下の通りです。 import net.sourceforge.sizeof.SizeOf; public class ArraySizeCheck { pr
現実逃避シリーズ第2弾(苦笑). とめどもさんが日記でJTAとJTSについて混乱されているようなので,ちょっと書いてみるてすと(またしても弱気,ほとんどうろ覚えなので). Java以前の分散トランザクション 正確には非Java環境での分散トランザクションですが,重要な仕様が二つあります. X/Open*1 DTP(Distributed Transaction Processing) この仕様は,80年代後半に作業が始まって,90年前後に最初の仕様がリリースされた(と記憶している)もので,簡単に言ってしまうとTUXEDO*2やEncina*3といったTPモニタのための仕様です(超乱暴). 初期のDTPのモデルはとても簡単(これが大事)で,主な構成要素は次の3つです. Application(AP) Transaction Manager(TM) Resource Manager(RM) こ
Java 16が2021/3/16にリリースされました。 多くのプログラマに関係ありそうな変更は、record、instanceofパターンマッチの正式化、Stream.toListです。またTLS1.0と1.1が無効になっているので古いMySQLなどへの接続でハマることがあるかもしれません。 詳細はこちら Java SE 16 Platform JSR 391 JDK 16 GA Release APIドキュメントはこちら Overview (Java SE 16) MacやLinuxでのインストールにはSDKMAN!をお勧めします Oracle OpenJDK以外に無償で商用利用できるディストリビューションとしては、次のようなものがあります。 AdoptOpenJDK Liberica JDK Amazon Corretto 16 Microsoft Build of OpenJDK
参照: http://stackoverflow.com/questions/2348399/why-does-java-net-urls-hashcode-resolve-the-host-to-an-ip 公式ドキュメントによると: public boolean equals(Object obj) … 2 つの URL オブジェクトが等しいのは、同じプロトコルを持ち、同じホストを参照し、ホスト上のポート番号が同じで、ファイルとファイルのフラグメントが同じ場合です。 2 つのホストが等価と見なされるのは、両方のホスト名が同じ IP アドレスに解決されるか、どちらかのホスト名を解決できない場合は、大文字小文字に関係なくホスト名が等しいか、両方のホスト名が null に等しい場合です。 ホスト比較には名前解決が必要なので、この操作はブロック操作です。 java.net.URL#equals
概要 配布用の軽量JREの作り方の記事でも紹介していますが、Java 9 以降では必要最低限のモジュールで構成された軽量JREを作ることができます。 JDKに付属の jdeps コマンドで軽量JREに含めるべき依存モジュールを知ることはできますが、作成した軽量JREでアプリを実行してみると以下の例外に遭遇することがあります。 これはサポート外の文字コードを指定した場合に発生する例外となります。軽量JREではない通常のJDKでは発生していない例外ですが、jdeps コマンドで示された必要最低限のモジュールは含んでいるはずですが例外が発生してしまっています。 つまり、jdeps コマンドだけでは軽量JREに含めるべきモジュールが不十分ということになります。 本記事では軽量JREを使う際に上記の例外を回避する方法についてご紹介します。 なぜ例外が発生するのか EUC-JP などの拡張文字コードは
仕事でJava 8とJava 11を行ったり来たりしたり、Javaの特定のマイナーバージョンでのみ発生する問題の調査などをしないといけないケースが出てきて、最初は都度環境変数で切り替えていたのですが、切り替え忘れてうっかり別のバージョンでコンパイルしてしまうということが増えてきたのでjenvというツールを試してみました。 github.com Macの場合はbrewでインストールできます。 $ brew install jenv jenvはデフォルトでは~/.jenvに設定などを保存するようです。以下のディレクトリを手動で作成しておく必要がありました。*1 $ mkdir -p ~/.jenv/versions .bash_profileなどに以下を追加。 eval "$(jenv init -)" JDKはbrew caskでインストールできるようなのですが、手元にはすでにインストールし
Java 14正式版が登場。テキストブロック、インストーラー作成ツールなど新機能。Solaris/SPARC版はついに引退 Java 14正式版が登場しました。 2017年9月に登場したJava 9以降、Javaは6カ月ごとに「フィーチャーリリース」と呼ばれるメジャーアップデートが行われています。Java 14は、昨年9月に登場したJava 13に続くメジャーアップデートです。 Oracle is proud to announce the availability of #Java 14! Download: https://t.co/RppJOsT0WZ Release Notes: https://t.co/PA5jibv7o1 Documentation: https://t.co/0aGT8pWp80 Blog: https://t.co/rtiBtagTvm pic.twitt
この記事の目的 「Javaの環境構築」で絶対にハマったり、錯綜する情報にいつも惑わされる人に向けた記事です。 2017年以降のJavaは、移り変わりが激しい世界になりました。このことを認識し、「軸となる考え方」や「重要な動向」を把握できるように、調べた情報をまとめました。 「5年ぶりに(Java|JVM言語)触るんだけど環境周りが全然わからん」とか、「CorrettoとかAdoptOpenJDKとか、みんな何を言っているんだ」という人(つまりちょっと前の筆者)が、「今後に渡って2度とハマらないための基礎知識を得られること」を目的にしています。以下の3本立てです: ざっくりとした歴史 2020年におけるローカル開発環境構築 情報源と参考URL APIや言語仕様の変更点には触れません(他の良い記事があります)。 I. ざっくりとした歴史 2017年9月、OracleはJavaのリリース・モデル
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く