サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
デスク環境を整える
www.sakatakoichi.com
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を使う際にネイティブイ
ドラゴンブックとは、こちらの書籍です。 コンパイラ―原理・技法・ツール (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
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のサポートとアップデートに関して、世界の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
JEP 309: Dynamic Class-File Constantsというものがあります。これはConstant Dynamic(condy)と呼ばれるものです。 http://openjdk.java.net/jeps/309 Constant Dynamic、つまり動的な定数です。Javaでは今まで(10まで)プリミティブとリテラルを持つStringだけConstant Poolに格納できました。condyでその他のものもConstant Poolで扱えるようになります。 さらに、condyでは定数値の初期化を遅延します。今までコンパイル時に値が確定しているものだけが対象でしたが、それを拡大します。 Invokedynamicとの類似性 Invokedynamic(indy)というものがJava 7からあります。JVMで動的な呼び出しを実現するものです。コードの実行時にInvok
Project Loomのソースを読んでいると、また遭遇しました。 public class Continuation { ... @HotSpotIntrinsicCandidate private static int doYield(int scopes) { throw new Error("Intrinsic not installed"); }; ... } @HotSpotIntrinsicCandidateアノテーションです。継続の停止処理であるdoYield()メソッドは、エラーをスローする実装になっています。もちろん実際はエラーとならず、停止処理が実行されるわけですが、どうなっているのでしょうか? 僕は、@HotSpotIntrinsicCandidate、あーCPUアーキテクチャごとの処理があって実行されてるんだよね、くらいの認識でそれ以上深めてことはありませんでした
こちらのツイートが話題になっていました。 MySQL MLE Pluginはマルチ言語VMであるGraalVMを内包することでMySQL上で複数の開発言語でストアドプログラムを作成/実行可能とする。近日中にMySQL Labsで利用可能となる予定。まずはJavaScriptのサポートから。MySQLデータ型およびPythonのサポートを準備中 https://t.co/MSxhcROA7e #mysql_jp— MySQL_Jp (@mysql_jp) April 28, 2018 GraalVMは組み込みが可能です。MySQL MLE PluginでMySQLにGraalVMを組み込み、JavaScript/node.jsを(将来的にはその他言語も)データベース上で実行できるようになります。 MySQL MLE Pluginはまだリリースされていないのですが、実はOracle Datab
今回は他言語実行環境としてのGraalVM、Polyglotに着目します。現時点での最新版、1.0.0-rc5を使います。 http://www.graalvm.org/downloads/ なお、rc5からCommunity EditionがmacOSに対応しました(今まではEnterprise Editionだけでした)。こちらを使います。 $ java -version openjdk version "1.8.0_172" OpenJDK Runtime Environment (build 1.8.0_172-20180626105433.graaluser.jdk8u-src-tar-g-b11) GraalVM 1.0.0-rc5 (build 25.71-b01-internal-jvmci-0.46, mixed mode) Polyglot Shell $ $JAVA_
JJUG CCC 2018 Springで"海外登壇経験者パネルディスカッション"のパネリストをしました。他のみなさんは英語がとても堪能だったり何度も英語登壇をされていたりする中、15分の英語登壇をしただけの私がパネリストというのもとても恐縮でした。 ただ、私は日本の教育システムそのままで育った人間です。受験英語のみで、生まれてから海外の人と話したことはありませんでした。発音の練習などしたこともなく、カタカナ英語でした(今もかなりそう)。きっと同じように育った人も多いはずです。いろんな機会があった人を見て、不平等だよなあと私も思うことはありますが、個人としては今いるレベルから前に進んでいくしかありません。 私の学習法が最高とも正しいとも最短とも思いませんが、前述のCCCのセッションでどうしているか知りたいというリクエストもありましたので、学習履歴を書きます。 学習前スペック 日本の公立小中
Java Day Tokyo 2018で、"Graal: How to use the new JVM JIT compiler in real life"というセッションがありました。スピーカはTwitter社のChris Thalingerさんです。 www.oracle.co.jp Chrisさんは今年Voxxed DaysやOracle Codeなどさまざまなカンファレンスでこのセッションをやっておられます。日本でもこうしてやっていただけて感無量です! 参加できなかった方は、このセッションタイトルでYouTubeを検索すると、限りなく同じセッションを視聴できます。 www.youtube.com ショートバージョンとロングバージョンがありますので、長い方をお選びください。私は(同じ内容ながら)いくつか見ています。たしかデモがうまくいかなかったものもあると思います。 ここでのGraa
詳説GraalVMの第1回として、GraalVMの概要を書きました。 www.sakatakoichi.com 第2回は開発の背景事情と情報収集方法を書きます。使い方はきっといろんな方が書いておられると考えたからです。GraalVMファンとして、他の方があまり書かないマニアック情報を提供します。 GraalVMの日本語初出記事 GraalVMの日本語初出記事は、おそらくJava Magazineではないでしょうか。 http://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-SO12-Polygot-interview.pdf これはJava Magazineの2012年9月10月号です。Java Magazineって何?という方は私の過去のエントリをお読みください。 この記事でインタビューを受けている方が、Thomas
GraalVMが1.0.0 RC1を出し、公式サイトを公開しました! http://www.graalvm.org/ 日本の技術ブログメディアPublickeyさんも取り上げておられます。 www.publickey1.jp そのこともあって、Graalで検索しこのブログへたどり着いた方も多かったです。私は1年ほど前、0.23の頃からGraalVMとGraal(両者の違いは後述)を触ってきました(単に触っているだけの1ファンです)。おそらく熱狂的なファンの方で、JavaOneではGraalとあるものは全セッション入りましたし、YouTubeにある世界の技術カンファレンス動画でGraalに関するものはおそらくすべて見ています。 なので自己満足がてらGraalVMについて書いていきます。 GraalVMって何なの? 端的に言うと"Polyglot VM"です。Polyglotとは多言語を意味し
じゅくちょーです。私はJava製JITコンパイラGraalにとても強く興味を持っています。 Graal の検索結果 - Fight the Future Graalのコードを読んでいる内に、自分はGraalの前にそもそもコンパイラをよく理解していないと感じるようになりました。コンパイラに関してはたくさんよい書籍があるようですが、きしださんのブログで以下の書籍を見つけ、読みました。 d.hatena.ne.jp コンパイラとバーチャルマシン (IT Text) 作者: 今城哲二,岩沢京子,千葉雄司,布広永示出版社/メーカー: オーム社発売日: 2004/09/01メディア: 単行本購入: 2人 クリック: 21回この商品を含むブログ (13件) を見る 大学生の教科書向けの本です。200pちょいと薄いです。わかりやすくおもしろい本でした。 この本にはCのサブセットな言語Chavaのコンパイラ
Eclipseファウンデーションへ移管されたJava EEの新名称が決まりました。 And the Name Is… | Life at Eclipse "Jakarta EE"です。 "Jakarta EE" or "Enterprise Profile"の決選投票が2/23までありました。7000弱の投票のうち65%が"Jakarta EE"へ票を入れています(私もです)。 なぜJava EEから変えるの?Java EEのままでいいんじゃない? むしろJava EEのままにできないから変えるというのが正しいです。こちらの記事に詳しいです。翻訳者は私です。 www.infoq.com "Java EE"に含まれるJavaという単語はオラクルの登録商標です。そのため、Eclipseファウンデーションへの移管が決定したタイミングで、オラクルから"Java EE"および"javax.x"パッケ
2月19日、株式会社ロックオンさんにて関ジャバのイベントを開催しました。 僕はJfokusで聴いた内容、Java 10以降のJava: リリースサイクルの変更とOpenJDKへの統合- JfokusでのMark Reinhold氏のセッションからを話しました。スライドは以下です。 Java release cadence has been changed and about Project Amber from Koichi Sakata www.slideshare.net Javaのリリースサイクル変更や、OpenJDKビルドへの変更については情報が錯綜しているためか困っている方も多かったようで、好評のようでした。 Project Amberの説明では、Javaの進化、未来を出したのでどよめきがあったりと、よい感触でした。
Java 10以降のJavaについて、少し混乱があるようです。 ちょうど僕は数日前までJfokusというJavaカンファレンスでストックホルムに来ており、オラクルのJavaプラットフォームグループのチーフアーキテクト、Mark Reinhold氏による"Moving Java Forward Faster"というセッションに出ていました。 そこで聞いた内容を共有します。なお、そのセッションの動画も公開されています。 www.youtube.com 所感 何も心配いらない。むしろよいことである。 要約 今までのOracle JDKの無償版はなくなり、OpenJDKが提供されます。Oracle JDKとOpenJDKの違いとしては、Oracle JDKにはオラクルのバイナリコードライセンスがあること、一部のコードが異なる(TCKにより機能的な差はないと保証される)、グラフィック・ラスタライザ、
Project Loomをご存知でしょうか? http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html Project Loomは軽量スレッドであるFiberと、継続(Continuation)をJavaに導入することを狙っています。Project Loomはまだ提案されたばかりで、OpenJDKのプロジェクトとして登録されていません。現在は、プロジェクトの提案を参照することが可能です。 最新Java情報局 - (3/5)JavaOne 2017レポート、ここ数年で最も充実していたキーノート:ITpro 僕も軽量スレッド?Fiber?という感じです(継続はまだしも)。なのでLoomそのものの前にFiberを調べてみます。すると、"Quasar"という製品に行き着きます。"lightweight threads and act
JITWatchはJITコンパイルを可視化し分析するためのツールなのですが、これは2014年にこのブログにも書きました。 jyukutyo.hatenablog.com Twitterでこのツイートを見て、新機能を知りました。 New #JITWatch visualisations! See compiler thread queues, timings, bytecode and nmethod sizes. #HotSpot #Java #JVM pic.twitter.com/kCeIbWnhHa— Chris Newland (@chriswhocodes) 2017年12月9日 新機能を見てみます。サンプルのログは、JITWatchに付属しているデモ用ログファイル生成コマンドを実行して生成しました。 $ cd jitwatch $ ./makeDemoLogFile.sh $
8/1からポノス株式会社に勤務しています! どんな会社? スマートフォン向けゲーム会社です!歴史は長く1990年(27年前)に設立し、プレイステーション用ゲームからガラケーの公式コンテンツ、そしてスマートフォン向けゲームと提供を続けています。もっとも有名なものは"にゃんこ大戦争"というゲームです! www.ponos.jp esports事業にも注力しており、ゲーマー社員の方も数名いらっしゃいます。通常の業務をしつつ、大会への参加や練習を優先できるそうです。 www.ponos.jp どこにあるの? 京都の四条烏丸に本社があります。2017年8月現在私もここに勤務しています。東京にもオフィスがあり、恵比寿です。 会社としての規模は大きくはなく、全部で150名ほどです。 じゅくちょーは何をするの? 職種はサーバサイドエンジニアで変わらずです。ですが、大きな組織ではありませんしいろいろなことに
私ことじゅくちょーは、7月末でフリュー株式会社を退職することにしました。約5年半の在籍でした。 現在は有給消化中です。また、次の勤務先も決まっています。関西です!! 得たこと アジャイル開発のチームリーダ フリューではアジャイル開発がベースにあります。この場合のアジャイルが指す意味は、XP/スクラムといった具体的な手法というよりも、純粋に"態度"を指します。なので、プロジェクトの特性に合わせて、つまりは部署やチームごとに開発プロセスにかなり違いがあります。私の部署は入社時XPベースのプロセスを採用していました。 私はフリューに入るまで、客先常駐で典型的なウォーターフォール、マネジメントなどない!という開発を経験してきて、アジャイル開発に憧れ入社しました。もちろんアジャイルだからすべてがうまくいくわけではありません。ただ、自分たちでうまくいくようにプロセス自体を変えていける、まさに"アジャイ
kanjava.connpass.com 私が代表を務めている関西Javaエンジニアの会(関ジャバ)の、過去最大規模のイベント"KANJAVA PARTY 2017"を開催し、無事終了することができました! 参加者のみなさん、スピーカーのみなさん、そして運営メンバー陣、ありがとうございました!コミュニティはこの3者があってこそ成り立つものです。大きなトラブルはありませんでした。今回のフィードバックを生かし、今後のイベントに反映していきます。 #KanJavaParty— じゅくちょー Koichi Sakata (@jyukutyo) 2017年6月24日 このイベントでは関ジャバでの初の取り組みがありました。 初の複数トラック 初の100人規模 企画時は100人集まるかどうか不安でしたが、募集開始数日で申し込みが100人を超えキャンセル待ちに。都合がつかなくなった人はキャンセルをお願いし
2016年7月から、InfoQ.comの翻訳者として記事を翻訳しています。 https://www.infoq.com/jp/profile/%E9%98%AA%E7%94%B0-%E6%B5%A9%E4%B8%80 ほぼJava関連の記事を翻訳し続け、気づけば50記事になっていました。週1以上ペースですね。せっかく翻訳しているので、不定期で記事を引用しながらJavaの情報をニュースレターっぽく(しかしニュースレターがどんなものか自分自身わかっていない)投稿していこうと思います。もしかしたらvol.1で終わるかもしれません。 翻訳については、Javaチャンピオンからも激励をいただいております! @jyukutyo Automatin-moduleについてStephen Colebourneの発言の翻訳部分を引用して「翻訳大変だからじゅくちょーのを引用するけど翻訳悪いと思ってもじゅくちょーの
そんなとき、このような言葉をかけてもらえました。 @jyukutyo 中途半端でいいんですよ!その両輪が見える立場はとても大事です。— 鈴木雄介/Yusuke SUZUKI (@yusuke_arclamp) 2016年5月22日 @jyukutyo 中途半端さの悩みは「誰にも相談できない」ことです。同じ視野で考えられる人がいないから。でも、それは解決しない悩みです。むしろ、突き詰めて自分にしかできない判断をすることが価値になります。僕自身も中途半端で悩んでたことあります!— 鈴木雄介/Yusuke SUZUKI (@yusuke_arclamp) 2016年5月22日 @jyukutyo まさにそれが価値ですよ。ぜひ中途半端さを突き詰めてください。孤独な判断をするためには論理と哲学が必要です。そうしないとブレちゃうので。ぜひ、そこを悩み続けてください!— 鈴木雄介/Yusuke SUZU
とある資料を読ませていただいていて、「Uber JAR」なる単語が。 java -jar hoge.jarでアプリケーションを起動するタイプのものを指すのは理解できたのですが、 Uberって?っと思い検索してみました。 stackoverflow.com Über is the German word for above or over ... in this context, an uber-jar is an "over-jar", one level up from a simple "jar" なるほど!
いやーSpringは至れり尽くせりな気がする。 There are a few implementations of that abstraction available out of the box: JDK java.util.concurrent.ConcurrentMap based caches, EhCache, Gemfire cache, Guava caches and JSR-107 compliant caches. Spring Framework Reference Documentation このエントリではEhcacheそのものについては触れない。すでにEhcacheを利用していて、それをSpringで使うときの設定について。 Springの例にたがわず設定方法はいろいろあるけど(公式リファレンス参照)、XMLファイルでの設定は以下のとおり。 <?xml ve
公式リファレンスにはこうあった。 Spring-driven Method Validation The method validation feature supported by Bean Validation 1.1, and as a custom extension also by Hibernate Validator 4.3, can be integrated into a Spring context through a MethodValidationPostProcessor bean definition: <bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/> In order to be eligible for Spring-driv
次のページ
このページを最初にブックマークしてみませんか?
『Fight the Future{|じゅくのblog|}』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く