タグ

Javaに関するHHRのブックマーク (165)

  • Java: -jar と -classpath は併用できない - toyfish.blog

    Java アプリケーションを起動する java/javaw コマンドには、-jar というオプションがある。jar ファイルを指定するだけで起動できるという便利なオプションだが、クラスパスの柔軟な指定ができなくなる、という罠がある。 例えば jar ファイルに Manifest-Version: 1.0 Main-Class: my.app.Fooというマニフェストを入れておけば、 java -jar foo.jarとするだけで my.app.Foo クラス (の main メソッド) を起動することができる。Windows とかの環境で jar ファイルをダブルクリックするだけで起動できるのも、このオプションのおかげ。 ところが、 java -classpath bar.jar -jar foo.jarのようにして別の jar ファイルを利用することは、できそうだけどできない。-clas

    Java: -jar と -classpath は併用できない - toyfish.blog
    HHR
    HHR 2021/02/15
    -jar -cpは駄目。仕様。
  • JOL - Javaオブジェクトのメモリサイズを取得する - 覚えたら書く

    JOLは、Javaのオブジェクトがメモリ上にどうレイアウトされているかを確認するためのツールで、OpenJDK のサイトで公開されています。 JOLはJava Object Layout の略です。 利用準備 JOLを利用するために複雑なセットアップは不要です。JOLのjarを実行環境のclasspathに通すだけで利用可能です。 jarの入手は以下に従ってください ■手動でダウンロードする場合 以下からダウンロードしてください https://mvnrepository.com/artifact/org.openjdk.jol/jol-core ■Mavenを利用する場合 以下をpom.xmlに追記してください <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <versio

    JOL - Javaオブジェクトのメモリサイズを取得する - 覚えたら書く
    HHR
    HHR 2021/01/04
  • Java8のHotSpotVMからPermanent領域が消えた理由とその影響 | ギークを目指して

    今回も前回の記事につづき、Java8による変更点で未だあまり紹介されていないポイントを記事にしようと思う。 今回はJava8のHotSpotVMの話。Java8ではJEP122が取り込まれ、VMのメモリモデルが変更された。JEP122のタイトル「Remove the Permanent Generation」から想像できるとおり、Java8のHotSpotVMからは従来のPermanent領域が無くなった。 なぜ、こういった変更が行われたのだろうか?また、元々Permanent領域に格納されていた情報は何処にいってしまったのか?JVM付属のツールにどういった影響があるのか? 今回の記事ではこの点をまとめていこうと思う。 なお、HotSpotVMのメモリモデルについて詳しくない方は、先にこちらの項番(「補足 – HotSpotVMのメモリ構造概説)を読んでいただくとスムーズに読み進められるだ

    Java8のHotSpotVMからPermanent領域が消えた理由とその影響 | ギークを目指して
    HHR
    HHR 2020/12/14
    java8からのPermanent→Metaspace変更の背景
  • Javaで特定のパッケージ配下のクラスを検索する - CLOVER🍀

    1度やってみたかったんですよね、これ。DIコンテナとかで、よく特定のパッケージ配下のクラスを検索するような機能がありますが、これを自分で書いてみようと思います。 検索対象のクラスが配置されているパターンとしては、 ディレクトリ配下に.classファイルが配置してある JARファイル内にパッケージングしてある というのがよく考えられると思います。今回は、とりあえず上記2つを対象に考えます。 まず、検索対象のスケープゴートとして、以下のようなディレクトリ構成のクラスを用意しました。 ソースコード root/RootPackageClass1.java root/RootPackageClass2.java root/sub/SubPackageClass1.java root/sub/SubPackageClass2.javaクラスファイル root/RootPackageClass1.cla

    Javaで特定のパッケージ配下のクラスを検索する - CLOVER🍀
    HHR
    HHR 2020/10/19
    class loader。JarURLConnection JarEntry周りでのやり方も載っている
  • マルチスレッド・プログラミングの道具箱

    まえがき クラウド上の仮想サーバから手元のスマートフォンまで、いまや複数のCPUコアを搭載するマルチコアはどこにでもある環境になりました。ハードウェア側が並列(Parallel)・並行(Concurrent)処理に向けて急速に進化する一方で、ソフトウェア側つまりプログラミング言語の進化はさほど追い付いていません。並行処理記述の手軽さを求めた Go言語 や、マルチスレッド処理の安全性を重視する Rust言語 などが登場してはいるものの、「普通にプログラムを記述するだけで複数CPUコア環境で高速に走るプログラミング言語」は遠い夢物語のままです。 モダンなプログラミング言語や並列・並行処理ライブラリは、複雑で難解なマルチスレッド処理を直接記述しなくてすむよう、安全性・利便性の高い抽象化レイヤを提供します(例:Go言語のgoroutineとchannel、Rust言語の Rayonライブラリ)。し

    マルチスレッド・プログラミングの道具箱
    HHR
    HHR 2020/09/28
    セマフォ mutex lock
  • [Java] スタック・キューのメモ - Qiita

    目的 Javaのコレクションフレームワークの1つである スタック・キュー について、整理してみます。 各クラスやメソッドの詳細な説明はしません。 関連するインタフェース・クラス java.util.Queue キュー専用のインタフェース。 一般的にキューといえば FIFO だと思います。 しかし Javadoc では Queue の実装として FIFO 以外のものがあっても良いとしています。 Javadoc であげられている実装例は3種類あります。 FIFO (First In First Out) : 一般的なキュー LIFO (Last In First Out) : スタックをキューとして扱う場合 プライオリティキュー : 優先順位を持つキュー java.util.Deque 両端キュー。スタックとキューの両方として扱えます。 Queue インタフェースを拡張したもの。 Javado

    [Java] スタック・キューのメモ - Qiita
    HHR
    HHR 2020/08/21
    忘れがちだがLinkedListもキューとして使える。Queueを実装しているのでQueue<String> q = new LinkedList<>();することが出来る。LinkedListはランダムアクセスに弱いので待ち行列の途中抜けが頻発するとかには弱い
  • Javaで使えるオープンソース・キャッシュライブラリ - CLOVER🍀

    最近は、仕事でEhcacheを使っていたり、他にも調べたりすることがあったので、ちょっとJavaで使えるオープンソースなキャッシュライブラリについてまとめてみることにしました。 あ、そんなに大した内容ではないので、ご期待なさらぬよう…。 でまあ、改めて調べてみた感想としては、Ehcacheが現状デファクトになっていることが改めてわかった感じですね。Javaのキャッシュライブラリって、そこそこ数が見つかるんですけど、開発が止まってしまっているものが多かったり、ドキュメントも全然ないというものもけっこう多くて、割とカオス…。 しかも、軽量で気軽に導入できるキャッシュライブラリって、今はない感じですね。Guavaがキャッシュだけで独立していれば…。EhcacheとかInfinispanだと、機能で困ることはないと思いますが、ちょいと大きいですよね。 調べる時に気になるのは、以下のようなところでし

    Javaで使えるオープンソース・キャッシュライブラリ - CLOVER🍀
    HHR
    HHR 2020/08/20
    cache
  • Javaのダイレクトバッファの利用上の注意点と、各種バッファを使った読み込みパフォーマンスの比較 - seraphyの日記

    概要 前回では、ヒープ上に確保したByteBufferと、ダイレクトバッファとして作成したByteBufferでのデータの読み取りパフォーマンスを比較した結果、圧倒的にダイレクトバッファが速いことが分かった。 しかし上記ベンチマークは、あえてByteBuffer単体でのパフォーマンスの比較を行ったものであり、実際のファイル入出力処理を含んだ比較ではない。 いわば、純粋なByteBufferの性能比較である。 では、実際にファイルの読み取りを含んだ場合でも、はたしてダイレクトバッファを使ったほうが速いのであろうか? 今回は、実際の利用方法を意識して、このあたりを調べてみることとする。 ヒープバッファとダイレクトバッファの違い ByteBufferには大きく分けて2種類がある。 ヒープ上の作成されるヒープバッファ ネイティブ領域に作成されるダイレクトバッファ ヒープバッファは以下のように作成さ

    Javaのダイレクトバッファの利用上の注意点と、各種バッファを使った読み込みパフォーマンスの比較 - seraphyの日記
    HHR
    HHR 2020/02/25
    MaxDirectMemorySize
  • DIコンテナのインジェクション方法の使い分けについて - 日々常々

    DIコンテナを使う時にどのインジェクションを使うかって話です。 たぶん誰かがどこかで同じようなことを書いているだろうけれど、気にせず書くよ。 「他の誰かが書いている」なんてのを書かない理由にしてると何も書けなくなるし。 コンテナ DIコンテナのこと。 コンテナ管理 インスタンスのライフサイクルをコンテナが管理していること。雑に言えば、使う側で new しないってこと。 インジェクション Dependency Injectionのこと。 Short Answer コンストラクタインジェクションを使いましょう。使い分けなくていいです。 3種類のインジェクション インジェクションには3種類ありますね。他あっても知らない。 フィールドインジェクション セッターインジェクション コンストラクタインジェクション フィールドインジェクション 一番よく見るかな。 class Hoge { @Inject

    DIコンテナのインジェクション方法の使い分けについて - 日々常々
    HHR
    HHR 2020/01/28
  • How to get a path to a resource in a Java JAR file

    I am trying to get a path to a Resource but I have had no luck. This works (both in IDE and with the JAR) but this way I can't get a path to a file, only the file contents: ClassLoader classLoader = getClass().getClassLoader(); PrintInputStream(classLoader.getResourceAsStream("config/netclient.p")); If I do this: ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoad

    How to get a path to a resource in a Java JAR file
    HHR
    HHR 2020/01/28
    外部jarにあるresourceのパスを取得するにはgetResource('相対パス').toExternalForm()してjar:file:/path/to/foobar.jar!/baz.properties的なurlにする
  • 引数違いのClass#forNameの挙動を確認する - CLOVER🍀

    最近、仕事でのトラブルからクラスローダー周りについて調べたことがあり、何気なく使っていたClass#forNameとかClassLoader#loadClassの挙動について1度確認したくなりました。 そういえば、Class#forNameってforName(String)とforName(String, boolean, ClassLoader)がありますよね? というわけで、簡単な例で確認してみましょう。用意したのは、以下のようなサンプルコード。 ロードされるクラス(C.java) package test; public class C { static { System.out.println("This is C StaticInitializer Block"); } { System.out.println("This is C Initializer Block"); }

    引数違いのClass#forNameの挙動を確認する - CLOVER🍀
    HHR
    HHR 2020/01/21
    class loader
  • staticフィールドは、意図せず初期化されることがある - お気持ちの表明

    概要 AndroidJavaで書くマンしている 今まで、staticに突っ込んだ値は、アプリのプロセスが終わるまでは生きていると思っていた プロセスが終わるまで生きてるんだから、staticに値つっこんで管理せばええやろ〜〜〜と思って、そういったコードを書いている箇所があった 今回の場合、staticフィールドに状態を持たせるようなコードを書いていた 「staticの値って、ホントにプロセス終わるまで生きてるの?」「その理解、ホント?」とレビューで突っ込まれた 先に書いていた理解してた事柄は、学生の時に「そうなんだ〜。ふ〜ん。」程度に覚えていた知識で自信もなかったので、調べたのでそのメモ 先に結論 staticも初期化される可能性は普通にある staticとするのは定数のみにして、状態管理に使わないほうが良さそう (この理解に間違いがあれば、何かしらでツッコミを入れてもらえると、とてもあ

    staticフィールドは、意図せず初期化されることがある - お気持ちの表明
    HHR
    HHR 2020/01/14
    classloader クラスのアンロード unload class
  • Firing on All Engines

    Traditional Java profilers use either byte code instrumentation or sampling (taking stack traces at short intervals) to determine where time was spent. Both approaches add their own skews and oddities. Understanding the output of those profilers is an art of its own and requires quite some experience. Fortunately, Brendan Gregg, a performance engineer at Netflix, came up with flame graphs (see htt

    Firing on All Engines
    HHR
    HHR 2020/01/04
    flame graph
  • Java言語規定 目次

    目次 | 前 | 次 Java言語規定 目次 序文 0. 標準情報としての導入 0.1 適用範囲0.2 引用規格0.3 定義 1. はしがき 1.1 プログラム例1.2 文献 2. 文法 2.1 文脈自由文法2.2 字句文法2.3 構文文法2.4 文法記法 3. 字句構造 3.1 Unicode3.2 字句変換3.3 Unicodeエスケープ3.4 行終端子3.5 入力要素及びトークン3.6 空白類3.7 注釈3.8 識別子3.9 キーワード3.10 リテラル3.10.1 整数リテラル3.10.2 浮動小数点リテラル3.10.3 論理値リテラル3.10.4 文字リテラル3.10.5 文字列リテラル3.10.6 文字及び文字列リテラルのためのエスケープシーケンス3.10.7 空リテラル3.11 分離子3.12 演算子 4. 型,値及び変数 4.1 型及び値の種類4.2 プリミティブ型及び値4

    HHR
    HHR 2019/12/19
    言語仕様の翻訳
  • Efficient data transfer through zero copy

    JavaDevelop modern applications with the open Java ecosystem.The Java programming language is a high-level, object-oriented language. It is rapidly evolving across several fronts to simplify and accelerate development of modern applications.

    Efficient data transfer through zero copy
    HHR
    HHR 2019/12/16
    ClassLoader Thread.currentThread().getContextClassLoader() Struts,Spring,Hibernate等のライブラリはこれ使っているとのこと
  • クラスローダーについて

    [B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa

    クラスローダーについて
    HHR
    HHR 2019/12/15
    ClassLoader 地雷原。プロセス分けてBlueGreanデプロイやRPCでやろう、ってなってくるな…
  • The JarClassLoader Class (The Java™ Tutorials > Deployment > Packaging Programs in JAR Files)

    HHR
    HHR 2019/12/15
    JarURLConnectionでhttp経由でjarをopenしてclassloaderで読み込んでreflectionでmethodを呼び出すtutorial
  • Java のクラスアンロード (Class Unloading)

    作成日:2004.05.18 更新日:2005.06.21 今後、随時書き足して行きます。多分。 はじめに Java は動的にクラスのロードとアンロードが行われる仕組みになっている。 クラスはクラスファイルの形でディスク上やネットワークに配置され、プログラム中でそれらが当に必要になった段階で JavaVM 上に読み込まれる。 またクラスはその使用が終わった段階でガーベージコレクターによって動的に回収され JavaVM からアンロードされる。 Servlet / J2EE サーバーなどはこの性質を利用して運用中にプログラムの一部を入れ替えるホットスワップ (Hot Swap) を実現している。 だがこの仕組みを実装するには少し工夫がいる。 この文書ではクラスのアンロードを実現するやり方について述べる。 1. クラスのロードとアンロードの基的な仕組み クラスローダー Java VM がクラ

    HHR
    HHR 2019/12/13
    神記事。クラスのアンロードの条件や実際のクラスアンロードの実例がためになる
  • Javaのコンテナのメモリ割り当ての考え方をまきさんに教えていただいたので記録 - Mitsuyuki.Shiiba

    何度か教えていただいているので、今度こそしっかり覚えておきたくて、まきさんからのコメントを記録。 ## メモリサイズの考え方 SpringBootのアプリをコンテナとして動かす場合には768MB以上必要で、1GBくらいは割り当てる必要があるのではないかという僕のコメントに対していただいたコメント。 それは不正確..Tomcatを使う場合は最大コネクション(スレッド)がデフォルト200で+50スレッドくらい余裕を見ると250M (-Xss1M)でデフォルトのReservervedCodeCacheSize 240MとDirectMemorySize 10M加えた上にMaxMetaSpaceSizeがざっくり50Mくらい足すと550Mくらい使ってこれHeapを足すとコンテナサイズ— Toshiaki Maki (@making) November 16, 2019 その前提であればHeap 2

    Javaのコンテナのメモリ割り当ての考え方をまきさんに教えていただいたので記録 - Mitsuyuki.Shiiba
  • 7.5.2 Javaヒープのチューニング

    Javaヒープの各領域のサイズは、“表7.6 Javaヒープに関するオプション”に示すオプションをJava起動時に指定することで設定ができます。 なお、メモリ割り当てプールのデフォルトの初期値および最大値を、“表7.7 メモリ割り当てプールのデフォルトのサイズ”に示します。 また、Permanent世代領域のデフォルトの初期値および最大値を、“表7.8 Permanent世代領域のデフォルトのサイズ”に示します。 表7.6 Javaヒープに関するオプションオプション オプションの機能

    HHR
    HHR 2019/10/22
    linuxでovercommit memory(オーバーコミットメモリ)を有効にしている場合は-Xmxで仮確保される。-Xmsではないことに注意