Java

JNIのはじめの一歩

たまに必要になるJNI。ノート替わりにメモしておく。 例えばこんな感じのSample.javaコードを用意して、ここからヘッダファイルを生成する。 public class Sample { public static native int readValue(); } javac Sample.java -h . javacのヘルプみればわ…

Javaをサーバで実行するときの注意点

Windows限定だと思うのだが、サーバでJavaで書いたプログラムをRDPで実行した後、RDPをログアウトすると動かなくなる。 再度ログインして、ターミナルを操作しようとすると復帰するが、明らかに停止している。 これは、ログアウトのシグナルによって、Javaの…

Eclipse + Gradleのマルチプロジェクトのハマりどころ

EclipseでGradleのマルチプロジェクト構成で開発,構成管理をしていると結構ハマる。 IntellijやVSCodeに乗り換えたいのだが,だいたいマルチプロジェクトがうまく機能しなくて頓挫している。 ちなみに,なぜマルチプロジェクトにしているかというと,不用意…

Gradleから実行するJVMの環境変数の設定

これまでeclipseがいい感じにやってくれていて気づかなかったのだが, Gradleでテストをコマンド実行しようとしたとき, 実行するJVMのテストコードの環境変数を設定しようとするとハマった。 安直に以下のようにGradleのオプションに指定しても,Gradleから…

JavaのHashMapのソースを読む

いい加減ハッシュテーブルは実装レベルで理解しくべきということで,ざっと読んだときの気付きをメモしておく。10年前は読めなかったけど,今回はさくっと読めた。(読んだのは,Adopt Open JDK 13) テーブル内部では以下のクラスでデータが管理されていた。…

WeakReferenceの動作確認

JavaのWeakReferenceの動作を確認する。 import java.lang.ref.WeakReference; import java.util.WeakHashMap; public class Main { static class Entry{ private final String name; public Entry(String name) { this.name = name; } @Override public Str…

Javaのオブジェクトのサイズ感

Javaのオブジェクトのサイズのメモ。 reference 4byte (32bit JVM or heapが32GB未満の64bit JVM) 8byte (heapが32GB以上の64bit JVM) Object 12byte (heapによらず) Array 12byte (32bit JVM or heapが32GB未満の64bit JVM) 24byte(heapが32GB以上の64bit…

JavaのStreamで並列化できるのは最上位のStreamだけ

結論からいうと、Streamで並列化できるのは、最上位のStreamだけ。flatMapなどで,入れ子のStreamの処理については並行が効かない。(Javaのコードも読んだが,flatMapのStreamは内部コードでSequentialに変更されていることを確認した。) 基本的にはできるだ…

Javaからsortコマンドを使ってソートしてみる

大規模データを扱う場合に限るけど、sortコマンドを使うと、データを処理するプロセスとソートするプロセスを分離できて便利。大体はシェルスクリプトでつなげば済むけど、複雑なデータ処理をしたい場合などは、Javaからsortしたいときもあったりする。まず…

JOGLことはじめ。

2020/6/29追記 昔の記事なので、あれだけど、mavenなり、gradle使うともっと楽にできる。最近JOGL更新されてないし、いまから始めるのはあまりお勧めできない。 - 3Dを扱いたいと思いJOGLを試してみた。日本語ではあまり情報がないので、メモレベルだが残し…