Amberとは Java言語を拡張するプロジェクトです http://openjdk.java.net/projects/amber/ Amberのブランチ records データ保持用のクラスです sealed-types シールドタイプ newesapes line blockのエスケープ対応 patterns パターンマッチの全体的な開発 patterns-deconstruction パターンマッチでのデコンストラクション patterns-stage-1 instanceofのみのパターンマッチ pattern-runtime パターンマッチのランタイム? local-methods ローカルメソッド lambda-leftovers ラムダで_使えるようにする concise-method-declarations メソッド定義の簡略化 enhanced-enums 拡張enu
この記事はブロッキングやノンブロッキンクとは何か、Servlet3.0の Async Servletや Servlet3.1の NonblockingI/Oとは何か、を理解することが目的です。 検証バージョン ブロッキングI/O コード例(シングルスレッド) 実行例 コード例(マルチスレッド) 実行例(マルチスレッド) ブロッキングI/Oで何がいいか ブロッキングI/Oで何が困るか ノンブロッキングI/O コード例 実行例 ノンブロッキングI/Oで何がいいか ノンブロッキングI/Oで何が困るか Tomcatのコネクタ実装 ブロッキングI/O HTTP Keep-alive 今までありがとうBIOコネクタ ノンブロッキングI/O SocketProcessorの実行タイミング HTTP Keep-alive BIOとNIOを比べる その他の仕組み Servlet3.0 Async Servl
どうも!アプリケーション基盤チームの@yokotaso です。 2017/11/13 にサイボウズLiveの長時間にわたる障害が発生しご迷惑をおかけしました。 技術的な調査が一段落し、対応を進めております。 障害にいたった原因と対応のお話をさせていただきます。 簡単なまとめ Java8u152以降で、CPU負荷が高まる現象 Java標準のデシリアライズとSecurity Managerの相性が悪くなった 解決策は現時点では存在しない。サイボウズLiveでは、Java標準のデシリアライズをやめる準備段階 障害発生時の状況 障害発生の数時間前に、運用マシンのメンテナンスを行っておりました。 Javaのマイナーアップデート カーネルのアップデート その他、設定ファイルなどの更新 障害発生時には次のような現象が見られました。 JavaプロセスがCPU高負荷状態 MySQLに大量のロック及びエラーが
もうポリシーファイルは要りません。 大事なことなのでもう一度言います。もうポリシーファイルは要りません。 背景 Java では標準ライブラリの Cipher クラスを使えば、サードパーティのライブラリを使うことなく AES 暗号を扱うことができます。しかし、AES 暗号はアメリカの輸出規制の対象になっているらしく、標準では 128bit までの鍵しか扱えません。日本のようにこの輸出規制の対象にならない国では、別途 Oracle から無制限強度のポリシーファイルをダウンロードして、システムに上書きする必要があることは有名な話です。 JavaでAES256を使用できるようにする ポリシーファイルを差し替えれば AES 256 暗号を使えるのでよいのですが、よいのですが、...正直いって非常に面倒です。このあたりの経緯を知らない人に説明するのも面倒ですし、JDK を更新するたびに差し替えるのも面
今年のJavaOneオープニングの基調講演において、Oracleは、GPLでJava SEをリリースし、Oracle JDKの全ての機能について、オープンソース化する計画を発表した。また、Java EEは、マイクロサービスとサーバレスの新世界に適合していないことを認め、この問題に取り組む計画について話した。現代のマイクロサービスアーキテクチャのケーススタディは、AlibabaとSpotifyによって提供された。基調講演のビデオは、YouTubeで視聴できるが、ここでは、重要な情報を要約して提供する。 セッションは、Intelのシステム技術/最適化部門部長、Michael Greene氏の話から始まった。Greene氏は、どのように「未来のもっとも価値のある通貨がデータになる」かについて話し、IntelのXeonプロセッサは、そのデータを扱う準備ができていることを強調した。Greene氏の話
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? かつてJavaは技術の中心だった 私はSIerでシステム開発のアーキテクトやPMを担当しています。SIではまだまだJavaが主流ですが、文法を理解してコーディングできるだけでは活躍できない時代がすでにきていることを実感します。 私の上司が**「技術の渦」**という独特の表現を使って説明してくれたのですが、2000年から2006年ぐらいまではJavaを書くということは、いろいろな最新技術の実装を学べる時代でした。アプリケーションサーバー、XML、SOAP、MQ、CORBA、マルチスレッドなど、現代の評価としては芳しくないものも多いですが、
JVMにチューニング項目は多々あれど、プロダクションで運用する際に予めおさえておきたい項目をまとめてみるエントリです。*1 勿論、OSもJVMもデフォルトである程度のパフォーマンスは発揮でき、計測を伴わないチューニングは悪手であることはよく知られています。 しかし、設定しておかないとパフォーマンスにそのまま影響すると分かるものを調べないのは裸で戦場に赴くようなものです。*2 どんな項目をどう変更すれば良いのか知っていることは重要な武器なのです。 なぜ調べるのか 今回、チューニングポイントを調べるにあたって、私のモチベーションはどこにあるのかを考えると、以下の要件を満たしたいということがあげられます。 アプリケーションとして求められる品質水準として動作する → 性能目標 異常時に事象を追うことができる ここでいう品質水準・異常とは、パフォーマンスが明らかに低い、アプリケーションがクラッシュす
前回、Stream の裏舞台について見てみました。 blog1.mammb.com ついでなので、今回は Lambda 式の裏舞台について見てみましょう。 はじめに 有名な話ではありますが、以下の匿名クラスを含むコードをコンパイルすると、2つのクラスファイルが生成されます。 public class Main { public static void main(String... args) { Logger.getGlobal().info(new Supplier<String>() { @Override public String get() { return "hello"; } }); } } 以下のようなクラスファイルになります。 Main.class Main$1.class では、lambdaで書いた場合はどうなるでしょう。 public class Main { pub
Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String::isEmpty) // (2) パイプライン .forEach(System.out::print); // (3) 終端処理 (1) Stream の生成 (2) パイプライン (3) 終端処理 まとめ (1) Stream の生成 最初はストリームを取得する stream() の中身から見ていきます。 stream() は Collection インターフェースのデフォルトメソッドとして以下のように定義されています。 public interface Collect
訂正:Java EEの新開発プロジェクト名は「EE4J」(Eclipse Enterprise for Java)。Java EEに代わる新名称はこれから検討 「Java EE」(Java Platform, Enterprise Edition)がEclipse Foundationに移管された。Eclipseでの開発プロジェクトの名称は「EE4J」(Eclipse Enterprise for Java)となる。 (当初、Java EEの新名称が「EE4J」になるとしていましたが。開発プロジェクト名の間違いでした。お詫びして訂正します。本文中の追記もご参照ください) 業務アプリケーション向けのJavaフレームワークである「Java EE」(Java Platform, Enterprise Edition)は、9月25日に4年ぶりのメジャーバージョンアップとなる「Java EE 8」が
JavaOne2017を前にして、待望のJava9が遂にリリースしましたね! さて、Java9といえばやはり気になるのはjigsawによるモジュール機能です。モジュールの使い方までは良く見ますが、jlinkが個人的には気になってたので試した結果をまとめました。 はじめに Jigsawに関してですが少なくとも現時点では、fat-jarやgo言語のようなシングルバイナリを代替するようなことは単独ではできません。 ただ、モジュールとjlinkを使うことでアプリケーションを含んだ配布用のJVMを生成することが可能で、今回はそれについての説明になります。 モジュールで公開範囲の改善や依存の早期発見ができるようになったことは特に触れないので、その辺はこの記事とかを参考にされると良いと思います。 コードの準備 まずは、コードの準備です。 下記のような感じでアプリからライブラリが三階層で呼ばれてるようなサ
本日、ついに JavaSE 9 がリリースされました! そこで、かねてから噂になっていた JEP 254: Compact Strings がどのように実装されているのか調べてみました。 Compact Strings の概要 これまで String クラスや StringBuilder クラスなどの内部では、文字列を UTF-16 でエンコードして char 配列で保持していました。 つまり、一文字あたり*1常に char ひとつ = 2バイト分のメモリを使っていました。 しかし、これだと 1 バイトで表せる LATIN1(ASCII コード + ラテン文字)の文字列の場合、その半分が 0x00 になるという無駄がありました。 そこで、内部表現を変更し、文字列が LATIN1 のみで構成されるときは 1 文字を 1 バイトで保持するようにリファクタリングされました。 ちなみに、LATIN
2017年9月21日にいよいよ Java 9 がリリースされます。 Java 9 を利用することのメリットは一体何でしょうか?こんにちは。ヌーラボのアカウント基盤を Java で支える Nulab Apps チームの加藤です。 Nulab Apps チームが開発するアカウントの基盤はサード パーティ製の Java ライブラリだけでも 154 個の依存関係を有します。154 個の Java ライブラリは数々の破壊的変更を乗り越え、おおよそ最新の安定バージョンに更新し続けてきました。 もちろん言語のメジャーバージョンアップにも対応し、現在では Java 8 の関数型をプロダクト コードで使用可能な環境を維持しています(これが楽しい)。本ブログは、ヌーラボのアカウント基盤を先行して (ローカル開発環境のみで) Java 9 にマイグレーションして発生した問題と一時的な対処法を記録した奮戦録です。
Although still one of the most popular Markdown parsing libraries for the JVM, pegdown has reached its end of life. The project is essentially unmaintained with tickets piling up and crucial bugs not being fixed. pegdown's parsing performance isn't great. In some cases of pathological input runtime can even become exponential, which means that the parser either appears to "hang" completely or abor
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く