May 20, 2017Download as pptx, pdf38 likes60,889 views

May 20, 2017Download as pptx, pdf38 likes60,889 views
すでにJava12はRampdownフェーズに入り、機能がほぼ確定しており、順調に行けば3月19日にリリースされます。->されました。 ということで、Java12に入る機能をJEP、API、その他にわけてまとめます。 JDK 12 Early-Access Builds JEP まずは大きな機能をまとめたJEPベースの変更 http://openjdk.java.net/projects/jdk/12/ 全部で8個のJEPが入ってます。ふつうのJavaプログラマに影響ありそうなのは上の3つとDefault CDSですかね。残念ながらRaw String Literalsはドロップされました。 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 230: Microbenchmark Suite 325: Sw
Java 9、10でStringの+=にバグがあるということがStack OverFlowで報告されていました。 Why does array[idx++]+="a" increase idx once in Java 8 but twice in Java 9 and 10? - Stack Overflow どういうバグかというと「s[i++] += i + ""」のようなコードが正しく動かないというものです。 次のコードを実行してみます。 public class PlusEqual { public static void main(String[] args) { System.out.print(System.getProperty("java.version")); String[] s = {"aa", "bb"}; int i = 0; s[i++] += i + "";
2GBの Incremental CMS でぼちぼち動いていて、6GBも割り当てるのは避けたいという環境で、G1GCどないやろって試した記録。実用レベルにはなったのでしばらく動かしてみるけど、そこまでメリットは…という感じ。 -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCCause を付けて起動しては GCViewer に食わせて眺めるの繰り返しをしていた。 起動完了時に FullGC を手動で実行しているっぽいが、今の構成ではそこまでメリットがないので1secをケチって -XX:+DisableExplicitGC をつける -> いい感じ Young:Tenuredをガッと1G:2Gにしてみる -> GC回数やトータルの時間こそ減っても、最大の停止時間が延びてしまった。恐らくレンダリング周りを中心に短命なオブジェクトが多いので、まとめて掃
標準オプション 非標準オプション オプションのカテゴリと設定 jcmd によるオプションの確認 プラットフォーム固有のデフォルトチューニングフラグ プラットフォーム別のコンパイラ指定 主要なオプション 標準オプション -help または -? で標準オプションが確認できる。 $ java -help 使用方法: java [-options] class [args...] (クラスを実行する場合) または java [-options] -jar jarfile [args...] (jarファイルを実行する場合) optionsには次のものがあります。 -d32 使用可能な場合は32ビットのデータ・モデルを使用する -d64 使用可能な場合は64ビットのデータ・モデルを使用する -server "server" VMを選択する場合 ・・・ 非標準オプション -X とすると非標準のオプシ
あるアプリケーションの作業にとって、スループットは最も重要なターゲットです。1つ例を挙げると、長時間実行されるバッチ処理のジョブです。ガベージコレクションが実行されている間、バッチジョブが時々1、2秒止まっても、ジョブ全体がすぐに完了すれば問題ありません。 人間が直接対話するアプリケーションから金融取引システムまで、実質的な他のすべての作業では、システムが1、2秒か、数ミリ秒以上反応しない場合、大変なことになり得ます。金融取引では、しばしば一貫した停止時間と引き換えに、スループットを犠牲にするだけの価値はあります。物理的に利用可能なメモリ量によって制限されるアプリケーションを持ったり、footprintを維持しなければならなかったりすることもあります。そのような場合、停止時間とスループットの面の両方で、パフォーマンスをあきらめなければなりません。 以下のトレードオフは度々起こります。 大部
jcmd プロセスID VM.system_properties jinfo -sysprops プロセスID
こんにちは!SI部の満石です。 以前、仕事でJRockit Flight Recorder(現在OracleJDKに付属しているJava Flight Recorderの元になったもの)を使ったことがあり、最近出てきたHeapStatsにも興味があって使ってみたのでご紹介します。 HeapStatsとは NTT OSSセンタが開発したOSS(Open Source Software)であり、HeapStatsの日本語Wikiには以下のとおりに書かれています。 HeapStats とは、JavaVM のヒープやGC状況を監視する軽量なツールで、エラーの兆候を検知してSNMPのようなリアルタイムなアラートを発します。生成するログはかなり小さいもので、GUIツールで解析することができます。HeapStatsは、次の二つのプログラムで構成されます: エージェント(agent) – JavaVMの情
少し前のことになりますが会社の勉強会で1時間ほどGCの話をする機会があり、普通のGCの話ばかりしてもつまらないので後半はShenandoahをテーマにしてみました。以下そのときの話の備忘録です。 はじめに 早速ですがShenadoahの資料はプロジェクトメンバーのRoman Kennkeさんが公開してくれているので、英語が苦ではない方、ちゃんとした資料が見たい方はそちらを参照した方が幸せになれます。 また以下の文章には、自分の勘違いや記憶違い、開発が進んで変更されるところもあると思います。もしそういうところに気付かれた方はやさしく教えていただけるとありがたいです。 Shenadoahとは ShenandoahはOpenJDKのプロジェクトの一つで、"ultra-low pause time garbage collector"の開発プロジェクトであり、(少なくとも現時点では)GCの名前その
Java7 Update4 (java7u4) で正式サポートされたG1GC(ガベージ・ファーストGC)ですが、Java9ではデフォルトGCになることが確定しています。 参考: JEP248 またG1GCは、CMS GCを長期的に置き換えるものとして計画されています。 そこで、どのようなアルゴリズムなのか知っておいたほうが良さそうなので調査しました。 G1GCが向いているケース G1GCが向いているのは下記の環境です。 ヒープサイズが大きな環境(6GB以上) 一時停止可能時間がシビア(0.5sec未満) Oracleの 9 ガベージファースト・ガベージ・コレクタによると、CMS GCもしくはParallel GCを使っていて次のいずれかに該当したらG1GCへの切り替えを検討しましょうとのことです。 Javaヒープの50%超がライブ・データ(≒必要なデータ)で占められている。 オブジェクトの
この記事はJava Advent Calendar 2017の16日目です。 JDK 10 で追加される予定のJEP 286: Local-Variable Type Inferenceについて、その内容と使い方について考えてみます。 (2018.03.22 追記) JDK10正式版での動作確認について 2018年3月20日に、JDK10の正式版がリリースされましたので、この記事を書いたころから何か変更が入っていないか確認しました。 結果、動作確認したり以下のページを見る限り、特にこの記事に記載した内容については変更無しのようでした。 Java 10 Local Variable Type Inference | Oracle Developers なお余談ですが、この記事のコメント欄で話題になったvar list = new ArrayList<>();と書いてしまった場合の挙動について
class A { public static void main(String[] args) { String name = "Taro"; A a = new A(); a.say(name); } public void say(String name) { System.out.println("Hello, " + name); } } $ javac A.java $ java A Hello, Taro $ javap -p -v -c A --- snip --- public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=3, args_size=1 0: ldc #2
Cassandraのストレージエンジンを入れ替えて高速化した「Rocksandra」、Instagramがオープンソースで公開。Javaのガベージコレクションによる遅延を大幅に解消 Instagramは、NoSQLデータベースのCassandraで発生していたJavaのガベージコレクションに起因する遅延を解消し、高速化した改良版Cassandraをオープンソースで公開したと発表しました。 ストレージエンジンとしてキーバリューストアの「RocksDB」を用いたことから、同社はこの改良版Cassandraを「Rocksandra」と呼んでいます。 JavaのガベージコレクションがCassandraの遅延を発生させている 同社がRocksandraの開発に至った経緯は、エンジニアブログ「Open-sourcing a 10x reduction in Apache Cassandra tail
最初に断っておきたいのだが、私はGoのエキスパートではない。2~3週間前にGoを勉強し始めたばかりなので、ここで述べていることは私のGoに対する第一印象のようなものだ。この記事の主観的な部分には、間違っているところもあるかもしれない。これについては多分、後にレビューを書くつもりだ。しかし、その時まではここに書いておく。もしあなたがJavaプログラマなら、私の気持ちや経験をぜひ見てもらいたいし、もし間違っている記述があった場合は、コメント、訂正ともに大歓迎だ。 Golangは素晴らしい Javaとは対照的にGoは機械語にコンパイルされ、直接実行される。C言語とほぼ同じだ。VMマシンではないため、Javaとは大きく異なる。Goはオブジェクト指向、かつ、ある程度機能的でもあるので、単に自動ガベージコレクション機能の付いた新しいC言語というわけではない。プログラミング言語の世界が直線状だと仮定する
来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり) 2017年9月に「Java 9」が登場したばかりですが、いまから1カ月後の2018年3月には早くもJavaの新バージョン「Java 10」がリリースされます。そしてその6カ月後の9月にはさらに次の「Java 11」がリリース予定です。 Java 9以後のJavaは、毎年3月と9月の年2回メジャーバージョンアップを行う、タイムベースのリリースモデルを採用することになりました。今年はその最初の年となります。 オラクルによるJDKの提供方法やサポートポリシーも、これから大きく変更されることが明らかになっています。一般公開され無償でダウンロードできたOracle JDKの公開はJava 10が最後となり、サポートは3年
VSCodeで、JavaのHot Code Replacement(ホットコード置換)がサポートされた。ホットコード置換を用いると実行中のアプリケーションのコードを実行したまま動的に修正できるため、トライアンドエラーが容易になる。 アプリケーションのコードを修正した場合、その修正を反映させるためには、コンパイル型の言語であれば再コンパイルする必要があり、インタープリタ型の言語であればアプリケーションの再実行が必要となります。 しかしコードを書き換え、実行し、動作を確認するということを何度も繰り返す開発作業では、いちいち再コンパイルをしたり、再実行する手間はなんとも面倒です。 そこでJavaには、「Hot Code Replacement」(ホットコード置換)と呼ばれる機能が用意されています。これはコードを再コンパイルすることなく変更した内容をJavaVMに転送し、反映できるというものです。
目的 Javaで hashCode 関連のメソッドはいくつかのクラスに分散しているので、整理してみます。 各メソッドの詳細な説明はしません。 hashCode の基本 ハッシュ値を求める。ハッシュテーブル探索などで使われる(HashMap や HashSet など) equals() とセットで、矛盾なく実装する必要がある equals() が true を返すオブジェクトは、同じハッシュ値であること 違うハッシュ値である場合には、equals() は false を返すこと(対偶) equals() が false を返すオブジェクトが、同じハッシュ値であっても構わない(ハッシュ値の衝突)が、衝突が少ないほうが性能が良い メソッド java.lang.Object#hashCode() インスタンスのハッシュ値を計算する。 独自のクラスを HashMap などのキーに使いたいときには自分
Builderパターン 個人的にBuilderパターンはオブジェクトの生成制御や、ものによっては可読性が高くて好きなパターンなんですが、その実装には用途によっていくつかパターンがあるので、まとめてみました。 生成するオブジェクトの条件 クラス名:People フィールド:String name(必須), Integer age(必須), String hobby(オプション) 必須要素はnullを禁止 PeopleクラスはStringを返り値とするhelloメソッドを持つ 今回はBuilderパターンの比較のため、パターン上必要でない限りgetterなどのメソッドは省略 Native Builder Builderパターンではなく、ただのコンストラクタ。Builderパターンを使いたくなるのはこれをやりたくないからだけど、比較のために記載。 class People { private S
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く