サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
タスク管理術
www.sakatakoichi.com
JPAでそもそもそういう使い方するなよってことかもしれませんが。 ネイティブクエリを発行してその結果をエンティティ以外のクラスのインスタンスにマッピングしたいことがあるとします。 JPAの実装にHibernateを使っているときは、以下のコードで実現できます。 javax.persistence.Query q = JPA.em().createNativeQuery("select empno, ename from emp where job = :job").setParameter("job", "SALESMAN"); org.hibernate.Query hibernateQuery = ((HibernateQuery)q).getHibernateQuery(); List<Emp> resultList = hibernateQuery.setResultTransfo
JVM Language Summit (JVMLS) 2023とOpenJDK Committers' Workshopに参加しました。場所はUSのサンタクララにあるOracle社のキャンパスです。 JVM Language Summit — August 7–9, 2023 OpenJDK Committers’ Workshop JVMLSには2018と2019に参加しています。Committers' Workshopは初めての参加です。今年2023年2月にOpenJDKのコミッタになれたことが気持ちを後押ししてくれました。 www.sakatakoichi.com www.sakatakoichi.com The JVM Language Summit is an open technical collaboration among language designers, comp
fosdem.org www.jfokus.se FOSDEMはブリュッセル(ベルギー)、Jfokusはストックホルム(スウェーデン)です。Jfokusは、2年前2018年にも参加しました。 www.sakatakoichi.com この2つのカンファレンスは、(あえて)日程がつながるようになっており、Javaを開発しているエンジニアがそれなりの割合で続けて参加します。 2/1 Sat. - 2/2 Sun. FOSDEM 2/3 Mon. - 2/5 Wed. Jfokus FOSDEMでは、Javaのトラックは1日目だけであり、2日目(2/2)を途中で切り上げてベルギーからスウェーデンに移動するか、Jfokusの1日目(2/3)はワークショップデイでオプション選択のため、FOSDEMを2日間聞いて、Jfokusの1日目に同じく移動するという方法が取れます。私は前者で移動しました。なぜな
openjdk.java.net OpenJDKにはjtregのテストとgtest(GoogleTest)のテストがあるのですが、gtestの方です。ドキュメントにあるmake test-only TEST=の形式ですぐに動かせなかったので、同僚に教えてもらった他の実行方法をメモとして残します。 セットアップ GoogleTestをダウンロードします。バージョンはOpenJDKのドキュメントにあるものを使いましょう。 この記事を書いている時点では1.8.1でした。GitHubからクローンでもソースのダウンロードでもよいです。 OpenJDKのディレクトリでconfigureします。 $ bash configure --with-gtest=[googletestのディレクトリ] --enable-debug --with-native-debug-symbols=internal [go
JavaOne 2017のセッションで、Java 8のリリース以降に実施されたG1GCの改善を解説するものがありました。 youtu.be 主要な改善は5つあります。 String deduplication (JDK 8u20) Class unloading with concurrent mark (JDK 8u40) Eagerly reclaim humongous regions (JDK 8u60) Adaptive start of concurrent mark (JDK 9) More efficient collections (JDK 9) String deduplication(String重複除外) Stringの重複がある場合に、除外して1つを使うようにすることです。 Stringの値は、Stringインスタンスが持つchar配列(Java 9ではbyte配
JJUG CCC 2018 Fallのセッション、GCを発生させないJVMとコーディングスタイルにて、GCの発生を抑えるアプリケーション側の対処として、以下のことをするケースもある、とありました。 (https://www.slideshare.net/kenjikazumura/gcjvm より抜粋) String#internは、こういうメソッドです。 String (Java SE 11 & JDK 11 ) 「internメソッドが呼び出されたときに、equals(Object)メソッドによってこのStringオブジェクトに等しいと判定される文字列がプールにすでにあった場合は、プール内の該当する文字列が返されます。」 同一内容の文字列なら、プールにあるものを使います。すなわち、メモリ領域の節約という観点からでは、intern()を使えば、GC回数を減らせるのではないか、ということで
手持ちのコアファイルがない場合は、yasuenagさんのリポジトリからすぐに作れます!! https://github.com/YaSuenag/garakuta/tree/master/NativeSEGV Linuxではあらかじめulimit -c unlimitedしてから実行してください。 デバッグ情報付きのOpenJDKビルドを使います。OpenJDKのソースをcloneして: $ configure --enable-debug --with-native-debug-symbols=internal --disable-warnings-as-errors $ make images です。 今回はjdk14 (https://hg.openjdk.java.net/jdk/jdk14/) をビルドしたものを使いました。buildディレクトリ以下にOpenJDKビルドができあ
2020年3月13日に、『みんなのJava OpenJDKから始まる大変革期!』という書籍が出ます!私は、第5章で、GraalVMの入門ガイドとなる記事を書きました。 gihyo.jp GraalVMの章について この書籍は、現時点でのJavaの最新動向を、とくに今Javaでアプリケーションを構築しているJavaエンジニア向けに解説することを目的としています。そのため、昨年2019年に章立てを考えたときには、GraalVMは少しそこからずれた印象も、自分自身ありました。ただ、執筆している内に情勢は変わり、GraalVM、とくにネイティブイメージの部分は、本番環境で適用できる一歩手前まで来ている状況となりました。それは、ネイティブイメージをサポートする、QuarkusやMicronaut、Helidonといった最新Javaフレームワークが出てきたこと、FaaSでJavaを使う際にネイティブイ
こちらの内容に沿って、Graalの理解を深めています。 Understanding How Graal Works - a Java JIT Compiler Written in Java 前回はGraalにJITコンパイルをさせました。 jyukutyo.hatenablog.com 今回はGraalのグラフについてです。いわゆるプログラム依存グラフ(program-dependence-graph)です。無駄な処理を発見するために、コードをデータ構造(今回はグラフ)で表現するようにしているのです。これはGraalに限ったことではなく、C2コンパイラもこういった表現をしています(sea-of-nodes)。 x + yを例にします。x,yはローカル変数、+は演算子です。 矢印がデータフローです。2つのローカル変数が、+演算子に流れていきます。 また、データフローとは別に実行順序もありま
【Advanced】give ◯◯◯ up:giveとupの間に任意の1語を挟む見出しを検索:英辞郎 on the WEB:スペースアルク give {1,2} up = give と up の間に任意の 1〜2 語が存在する見出し語を検索 【Advanced】give ◯◯◯ up:giveとupの間に任意の1語を挟む見出しを検索:英辞郎 on the WEB:スペースアルク 他動詞 + 目的語 + 単語の形式は英語で非常に多いので便利。
DevNexus 2019で、Micronautのセッションを聴いてきたので、メモがてら断片的に記します。 Micronautの特徴の中に、こういったものがあります。 Minimal use of reflection Minimal use of proxies リフレクションや動的プロキシの利用を最低限にして、起動速度の向上やフットプリントの削減を図っています。Micornautでは、リフレクションを使わずにBeanのIntrospectionができます。単純なBookクラスでの、Introspectionを例にします。 import io.micronaut.core.annotation.Introspected; @Introspected public class Book { private String isbn; private String name; public B
前回はJCPそのものについて解説しました。 jyukutyo.hatenablog.com 今回はみなさん自身がJCPメンバーになるメリットやメンバーの種類、具体的な手順を解説します。 個人でJCPメンバーになって何がいいのか JCPメンバーには企業や非営利団体、JUGだけでなく個人もメンバーになることができるのでした。個人、という観点でJCPメンバーになるメリットは何でしょうか?JCP PMOのスライドには以下のようなことが書いています。 知識を得る スキルアップできる Visibility(可視度)を上げる 認知度を上げる オルトルイズム Fun(楽しさ) 友人を作る ここで聞き慣れない言葉があります。"オルトルイズム"です。辞書翻訳するとaltruism=利他主義とあります。日本人である僕やみなさんの多くにはわかりづらい概念です。自分がそこからさまざまなものを得たのなら、そこに対して
select version();
2019/07/29-31に、オラクルのUSサンタクララオフィス(本社ではないところ)で開催されている、JVM Language Summit(通称JVMLS)に参加しています。 http://openjdk.java.net/projects/mlvm/jvmlangsummit/ 私は昨年2018年に初参加して、今回が2回目です。 www.sakatakoichi.com JVMLSは、デベロッパーカンファレンスというよりも、もっと技術的な要素だけを扱うイベントです。主にJVMが関わるJavaの最新仕様動向とJVM言語関連、そしてその他の言語でもコンパイラやランタイムに関することが扱われます。参加者も200名前後と、大変少ないです。アジェンダは以下のとおりで、セッションは1トラックのみです。 その1日目が終わりました。セッションは録画されており、1日目のセッションはもう視聴できます!!
2019年2月のFOSDEMというイベントが、ベルギーのブリュッセルでありました。 FOSDEMは、Free and Open Source Developer's European Meetupの頭文字です。 そこで、「Build your own GC with OpenJDK in 20 minutes」というセッションがありました。 録画もあり、こちらから視聴できます。 FOSDEM 2019 - Build your own GC with OpenJDK in 20 minutes 私は、FOSDEM開催前からセッション一覧をチェックしていて、このセッションが非常に気になっていました。 内容は、何もしないGCであるEpsilon上に、GCを自分で実装するという、まさに私が求めていたものでした。 スピーカーは、レッドハット社のGCに取り組んでおられる方で、実装自体は、なんと私のこ
このブログを読んでいただいているということは、Javaを少なくとも使っているという状況と想像します。それでは、JCPのことはご存知でしょうか? JCPとは JCPとはJava Community Processのことです。公式サイトはこちらです。 The Java Community Process(SM) Program JCPはJavaの仕様策定に大きく関わっています。Javaの新しい仕様、たとえばJava SE 8で導入されたラムダ式のような新しい機能は、どのようにプロセスで導入されたのでしょう?オラクルのすごいエンジニアたちがJavaにラムダ式を入れよう!と思いついてガリガリコードを書いて、できたから次のバージョンに入れた…というわけではありません。Javaでは新しい仕様を導入したりすでにある仕様を改訂するためには、JCPにある標準化のプロセスを踏まなければなりません。JCPのP、
まるごとJavaScript & Ajax ! Vol.1を読み返してCPSを学んでみる。 def sumIterTrump(i: Int, part: Int, cont: Int => Unit): Function2[Int, Int, Function0[Int]] = { if (i > 10) { cont(part) null } else { println("progress " + i + "/10") sumIterTrump(i + 1, part + i, cont) } } sumIterTrump(1, 0, {sum: Int => println("sum is " + sum)}) p198を参照。ASをScalaに書き換えたけど、本当にこれでCPSなんだろうか?? 戻り値の型「Function2[Int, Int, Function0[Int]]」なん
ドラゴンブックとは、こちらの書籍です。 コンパイラ―原理・技法・ツール (Information & Computing) 作者: A.V.エイホ,R.セシィ,J.D.ウルマン,M.S.ラム,Alfred V. Aho,Jeffery D. Ullman,Ravi Sethi,Monica S. Lam,原田賢一出版社/メーカー: サイエンス社発売日: 2009/06/01メディア: 単行本購入: 1人 クリック: 128回この商品を含むブログ (30件) を見る きっかけ 私は、JVMに(詳しく)なりたいのです。 昨年、Java Day Tokyo 2018のNight Sessionに、Ask the speakersという企画がありました。Twitter VMチームで、元サンのChris Thalingerさんが、スピーカーの1人としておられました。私は、Chrisさんに、「Graa
TomcatでもJBossでもPOSTサイズが2Mを超えると、デフォルトの設定のままでは次のような例外が発生する。 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/appname] - POSTされたデータが大きすぎたので、パラメータが構文解析できませんでした。そのアプリケーションが巨大なPOSTを受け付けねばならない場合には、これを解決するためにコネクタのmaxPostSize属性を使用してください。 he.catalina.core.ContainerBase.[Catalina].[localhost].[/appname].[xxxServlet] - サーブレット xxxServlet のServlet.service()が 例外を投げました java.lang.IllegalStateExcepti
定数を利用した最適化、というのはイメージしやすいですし、実際速くなります。今回、Alekseyさんのサンプルを使いながら、まずはstatic finalな値のコンパイルコードを実際に見て、どう速いのか学びました。 JVM Anatomy Park #15: Just-In-Time Constants JMHのベンチマークコードは、これです。1000を、static final変数、static変数、finalなインスタンス変数、普通のインスタンス変数で割り算するだけです。 @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Fork(3) @BenchmarkMode(Mode.
JMH(Java Microbenchmark Harness)で、-prof perfasmをすると、perfと-XX:+PrintAssemblyを使って、JITコンパイラ生成コードでのホットな部分を表示してくれるという機能があります。これが、思いの外すごい機能だったので、紹介します。 前提条件 JMHを知っていて、動作させられる。 perfコマンドをインストールしている。 HSDISをセットアップしている。 動かす JMHのサンプルプロジェクトがあります。 https://hg.openjdk.java.net/code-tools/jmh/file/5984e353dca7/jmh-samples/src/main/java/org/openjdk/jmh/samples そこに、プロファイルを使うものがあります。それを動かします。JMHSample_35_Profilers.ja
Java 11でのみ発生します。7、8、9、10では発生せず、現在開発中のJava 12では、fixされています。 $ java -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode) -XX:+PrintStringTableStatisticsを付けてjavaコマンドを実行するだけです。MacOSでもLinuxでも発生します。 MacOS $ java -XX:+PrintStringTableStatistics -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime
OpenJDKをhg cloneしたあと、bin/idea.shを実行して、IntelliJ IDEAでソースコードを読んでいました。ただ、C++のコードを読む割合が増えてきて、IntelliJでは読みづらいな、と感じてきました。 以前chiroitoさんが、Eclipse上でOpenJDKをデバッグしていたことを思い出し、 chiroito.hatenablog.jp そうだ、JetBrainsにはCLionがあるじゃない、C++コードは読みやすくなるだろうし、それでOpenJDKのデバッグまでできればいいな、と考えました。 CMake OpenJDKはmakeなのですが、CLionは現在のところCMakeベースのプロジェクトのみサポートしています。そのままディレクトリを開いても、シンタックスハイライトされるだけで、関数定義に飛ぶといったことができません。CMakeLists.txtとい
JJUG CCC 2018 Fallに参加しました! www.java-users.jp そろそろ始発近くの新幹線で向かうのは、体力的にきついなと感じ始めました… JJUG基調講演「Javaの未来を考えよう」パネリスト JJUG鈴木会長の司会の下、せろさん、きしださんとともにパネリストとして話しました。私自身の正直な思いとしては、私程度のエンジニアとしての力量で、Javaエンジニアを代表しているように、技術的な話をしていいのか?という、自分自身への疑念はありました。同時に、Javaチャンピオンとして、こういった場で積極的に活動する思いも持っています。そういう意味で、やはり自分のコンフォートゾーンを出ている状態で、今までの私のコンフォートゾーンと、まだ融合していないようです。 さて、パネルディスカッションでは、3つの話題がありました。 JVMの進化 Javaのリリースサイクル変更 今後のJa
そういえば、Graal JITコンパイラのコードはいろいろ読んでみたことはあるけれど、ネイティブイメージのSubstrateVMの方はまったく読んでいないなあ、と思いました。 ネイティブイメージを生成してみる、的なことを、1年ほど前に試しただけでした。 www.sakatakoichi.com というわけで、読めるかもわかりませんが、準備していきます。 GraalVMのコードは、GitHub https://github.com/oracle/graal にありますので、まだの方はcloneしてください。 MX GraalVMは、ビルドにMXというツールを使っています。MavenやGradleではありません。単純に読むだけなら、MXは不要ですが、あると便利です。あとで使います。 MXをセットアップしましょう。 $ git clone https://github.com/graalvm/m
Oracle Code Oneは、JavaOneとして2017年まで開催されていたものを、リブランドしたカンファレンスです。 2018/10/22〜25までの4日間、USサンフランシスコのモスコーンコンベンションセンターで開催されました。このブログでは、時系列ではなく、トピックごとに書きます。 この投稿は、参加記の3つ目です。 GCセッション GCのセッションは、ShenandoahとZGCの2つを聴きました。 Shenandoah GC: The Next Generation [DEV5561] ZGC: A Scalable Low-Latency Garbage Collector [DEV6028] どちらも、録画が公開されていますので、そちらをご覧になるのが一番良いかと思います。 www.youtube.com www.youtube.com GCはJVMの構成要素ですので、も
Oracle Code Oneは、JavaOneとして2017年まで開催されていたものを、リブランドしたカンファレンスです。 2018/10/22〜25までの4日間、USサンフランシスコのモスコーンコンベンションセンターで開催されました。このブログでは、時系列ではなく、トピックごとに書きます。 この投稿は、参加記の2つ目です。1つ目はこちらです。 www.sakatakoichi.com 蟹One 日本からの参加者で、サンフランシスコ名物のダンジネスクラブを食べます。JavaOne時代から続く、伝統?のイベントです。私も4回目の参加となりました。 蟹One 2018 - connpass ガーリックソースのカニのローストです。1人1杯食べます。 めちゃくちゃおいしいです。締めはガーリックヌードルです。 例年最終日の夜だったのですが、今年は開催前日の夜でした。私も含め、最終日に後述のバーベキ
今後のJavaのサポートとアップデートに関して、世界のJavaチャンピオン数十名が執筆したJava is Still Freeというドキュメントを、日本のJavaコミュニティメンバーで翻訳しました。翻訳したドキュメントはこちらです。 docs.google.com 簡約バージョンと詳細バージョンがあります。目的に合わせて、バージョンを選んでいただければと思います。 たとえばこういった内容があります。 有償のOracle JDKとGPLv2 + Classpath ExceptionライセンスのOpenJDKの違い Java 8とJava 11(LTS)それぞれに対して提供される各JDKプロバイダのサービス 日本だけでなく、海外でも同様に、今回のJavaのリリースサイクルとOracle JDKの変更について、混乱があるようです。 背景 JavaチャンピオンメーリングリストにJava is S
JEP 181: Nest-Based Access Controlというものがあります。これはNestmates(ネストメイト)と呼ばれるものです。 http://openjdk.java.net/jeps/181 Nestmatesは、クラスやインタフェースをネストして作成したとき、ネストする側される側の両方を指す言葉です。アウタークラスとインナークラスといったものです。 実はJava 10まで、インナークラスからアウタークラスのprivateメソッドを呼び出すコードを書くと、変わったバイトコード出力となっていました。こういったコードです。 public class Outer { private void m_outerpriv() { System.out.println("called m_outerpriv"); } class Inner { public void test
次のページ
このページを最初にブックマークしてみませんか?
『Fight the Future{|じゅくのblog|}』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く