Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

エムスリーでマルチデバイスチームのチームリーダーをしている松原@ma2geです。 マルチデバイスチームはこちらのテックブログでは初出なので簡単に紹介すると、iOS や Android 等のデバイス対応を主導する開発するチームで、主に iOS, Android のネイティブアプリ開発から、アプリから叩く API サーバ(いわゆる Backends For Frontends(BFF))、プッシュ通知基盤システムのバックエンドサービスも開発しております。 私自身は3月までは別チームで Rails/Java/Elixir などを触っていましたが、4月から現チームに移動しこちらでもまた新たな挑戦をさせてもらっています。 💪 前提 今回はネイティブアプリ向けの RESTful な API サーバがレガシーとなっており、このサーバのリニューアルを検討している話を書きます。 対象のサーバはフレームワー
GraalVM の native-image で HelloWorld してみる 目的 https://medium.com/graalvm/instant-netty-startup-using-graalvm-native-image-generation-ed6f14ff7692 によると、graalvm を利用すると Java Application の起動が圧倒的に高速になるようだ。実際にどの程度高速化されるのかを Hello World Application を手元で実行してみることにより体感する。 実験 $ javac Hello.java $ java Hello Hello $ time java Hello Hello java Hello 0.08s user 0.02s system 102% cpu 0.097 total $ ~/Downloads/graal
JVM (Java 仮想マシン) には DNS の名前解決の結果をキャッシュする挙動が備わっている。キャッシュするだけならいいのだけれど、このキャッシュでは DNS の TTL を無視してキャッシュするため、名前解決の結果が変わっても JVM からの接続先が切り替わるまでに(TTL から想定される時間以上に)時間がかかる、あるいは全く切り替わらないということがある。この挙動やその制御について調べたので、その話をする。 (以下の話題では Oracle JDK および OpenJDK を対象にして論じるので、それ以外の JVM 実装でどうなってるかは調べていない。適用できる箇所もあればそうでない箇所もありそう) 背景・解説 これらのデフォルト値は名前解決成功時は セキュリティーマネージャーがインストールされている場合のデフォルト値は -1 (ずっと) で、セキュリティーマネージャーがインストー
こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。 今回は Java アプリケーションをセキュアに運用する仕組みである Java Security Manager について紹介しようと思います。この仕組みは Linux の強制アクセス制御機構(SELinux や AppArmor) の Java 版に相当するもので、プログラムの挙動を制限することができます。弊社が提供するクラウドサービス cybozu.com でも有効化されています。 セキュアなサービスを提供する上では良い仕組みだと思うのですが、検索したところ Java Security Manager に関する記事があまり多くなかったため、我々が得た知見をここに記します。 Java Security Manager とは Java Security Manager (以下 JSM) とは、Java コードを安
さきほどの記事で Lambda 式を「構文糖」と書きましたが、実はそうじゃないのかもしれません。 Java 7 で追加された invokedynamic 命令を使って、 Lambda 式の実行を効率化する、という話があるからです。 以下、 Brian Goetz の From Lambdas to Bytecode という資料から理解できた範囲を書きます。 2011 年に開催された JVM Language Summit で発表されたものみたいです。現時点での仕様のドラフトは JSR 335 の添付文書 metafactory.pdf をご覧ください。また、 invokedynamic については 2月の JJUG Night Seminar で使った Java 7 invokedynamic の概要をお薦めします。 例として、次のようなコードを考えてみます。 // リストの要素を倍にして
Java の新たなバージョンである JDK 9 のリリースが約 2 ヶ月後に控えているが、最大の目玉と言っても過言はない Project Jigsaw がコミュニティから No を突きつけられた。この最近の流れを、極力意見を混ぜずに事実を淡々と紹介する。 Project Jigsaw とは 乱暴に言うと Java の新しい分割の仕方としてモジュールを導入しようという取組 詳細は手前味噌ですが以下のスライド参考 Prepare for Java 9 #jjug from Yuji Kubota 前提 Java の機能は JSR (Java Specification Request) が JCP (Java Community Process) で承認されて初めて導入される Project Jigsaw も例外ではなく JSR 376: Java Platform Module System
News, Technical discussions, research papers and assorted things of interest related to the Java programming language NO programming help, NO learning Java related questions, NO installing or downloading Java questions, NO JVM languages - Exclusively Java
タイトルの通りCapistranoでJavaのWebアプリケーション(warファイルとかJettyを組み込んだjarファイルとか)をデプロイしてるのですが、みなさんどうやってるんでしょうか!? 会社ではJava以外のプロダクトも結構あって、それらをCapistranoでデプロイしているからJavaのプロダクトもCapistranoでデプロイしているのですが、Gradleとかでやるのが多いのかなぁー。。。 最近Capistranoのバージョンを2から3へ上げたときに、その辺の事情が気になったのでブログ記事に書くことにしました。 Capistranoのバージョンは、3.2.1です。 インストールやタスクのフローなどは以下のページが参考になると思います。 入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい | GREE Engineers' Blog Capistrano
Fork/Joinとは? JavaSE7でサポートされるjava.util.concurrent.ForkJoinPoolは、ExecutorServiceの一員であり、一見するとThreadPoolExecutorに似たようなものに思えるが、実際は全く別の、異質のものである。 ForkJoinPoolは、ありていに言えばWork-stealingアルゴリズムの実装であり、無数のタスクを無駄なく論理CPU分のスレッドに割り当てるものである。 ForkJoinPoolはデフォルトでは論理CPU数分のスレッドプールをもつように構築される。 そして、あるタスクが完了するか、もしくは待ちになったら、すぐに別のタスクがアクティブとなり、常に、論理CPU数分のスレッドだけがアクティブになるように調整される。 また、ForkJoinPoolに入れたForkJoinTaskは、そのタスクの中で新たなタスク
Suppose that I have two int[] arrays input1 and input2. I want to take only positive numbers from the first one, take distinct numbers from the second one, merge them together, sort and store into the resulting array. This can be performed using streams: int[] result = IntStream.concat(Arrays.stream(input1).filter(x -> x > 0), Arrays.stream(input2).distinct()).sorted().toArray(); I want to speed u
モバイルアプリのスレッドプールサイズの最適化(画像読み込み編) - クックパッド開発者ブログ これに対する「I/O多重化すればスレッド数とか気にしなくていいんじゃないの」という意見を聞いて、それもそうだなと思ったので検証してみました。 前提知識 IO多重化にはjava.nio.channels.Selector と java.nio.channels.SocketChannel を使う Selector は Perlの IO::Select によく似たインターフェイスと機能を持つ つまり select(2) ないし同等のシステムコールへのインターフェイス Androidの場合に使われるのは epool(2) かも SocketChannel は Selector で多重化できるsocket Androidのdocumentはあまりないが、Oracleのドキュメントがあるので参考になる Se
Summary Enhance the Java Language to extend type inference to declarations of local variables with initializers. Goals We seek to improve the developer experience by reducing the ceremony associated with writing Java code, while maintaining Java's commitment to static type safety, by allowing developers to elide the often-unnecessary manifest declaration of local variable types. This feature would
public class Main { public static void main(String[] args) throws Throwable { int num = 100; double[] syncList = new double[num]; double[] atomicList = new double[num]; for (int i = 0; i < num; i++) { IntTest it = new IntTest(); double sync = test(()->it.testSync()); double atomic = test(()->it.testAtomic()); syncList[i] = sync; atomicList[i] = atomic; System.out.println(i+" "+sync+" "+atomic); }
JavaのAtomicパッケージにはAtomicFloatとかAtomicDoubleが無くて,ドキュメントを見ると また、Float.floatToIntBits や Float.intBitstoFloat 変換を使用して float を保持したり、Double.doubleToLongBits や Double.longBitsToDouble 変換を使用して double を保持したりできます。 ということなので,作ってみた. import java.util.concurrent.atomic.AtomicInteger; public class AtomicFloat { private static final int toI(float f){ return Float.floatToRawIntBits(f); } private static final float
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く