問題タブ [jol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java オブジェクトは Android のメモリにどのように配置されますか?
私は、HotSpot のヒープ上のオブジェクトのレイアウトにはかなり精通していますが、Android についてはあまり詳しくありません。
たとえば、32 ビットの HotSpot JVM では、ヒープ上のオブジェクトは 8 バイトのヘッダーとして実装され、その後にオブジェクトのフィールドが続きます (1 バイトはboolean
、参照は 4 バイト、その他は想定どおり)。特定の順序で (スーパークラスのフィールドにはいくつかの特別な規則を使用して)、8 バイトの倍数になるようにパディングされます。
調べてみましたが、Android 固有の情報は見つかりませんでした。
(Android でのメモリ消費を最小限に抑えるために、非常に広く使用されているデータ構造を最適化することに興味があります。)
java - jol GraphLayout出力の「(何か他のもの)」とは何ですか?
jol の GraphLayout クラスを使用して、オブジェクト インスタンスから参照されているオブジェクトのグラフを出力すると、出力エントリの一部に、タイプと参照パスの代わりに「(something else)」と表示されます。たとえば、20 個のランダムな Integer オブジェクトのリストのグラフを出力する次のコードを考えてみましょう。
このコードは次を出力します。
DuckDuckGo と Google で を検索しjol "something else"
ても、有用なヒットは返されませんでした。
"(something other)" エントリは何を表していますか?
java - JOLSample_16_AL_LL の ArrayList のフットプリントを理解しようとしています
問題のコードへのリンクは次のとおりです- http://hg.openjdk.java.net/code-tools/jol/file/07087260ce41/jol-samples/src/main/java/org/openjdk/jol/samples/ JOLSample_16_AL_LL.java
コードをそのまま実行すると、次のように表示されます。
[Ljava.lang.Object; の 4952 バイトがどこにあるのかわかりません。から来ています。ArrayList の作成を更新し、初期サイズを 1000 に設定して成長しないようにすると、次のようになります。
ありがとう。
アップデート
CompressedOops (-XX:-UseCompressedOops) をオフにしました。新しい結果は次のとおりです。
そのため、CompressedOops を無効にすると、参照サイズが 8 バイトに増加します。オブジェクト配列が 1000 個の整数オブジェクトへの参照を保持していることは、私にとってさらに理にかなっています。
java - オブジェクト ヘッダーのマスク ワードのビットを変更してオブジェクトを固定する
オブジェクトヘッダーのマークワードのビットの1つを自分で設定することで、オブジェクトがGCによって移動されるのを防ぐことができるかどうか疑問に思っていました(GCをだまそうとしています)。
したがって、基本的に、この方法でマークされたオブジェクトが常に同じメモリアドレスを持つことを保証できるかどうかを知りたいと思います。
java - jol は Java9 で少し壊れていますか?
Java-9 ビルド9-ea+149 および jol 0.6を使用します。
この簡単なコードを実行します:
出力:
このアクセス拒否部分は、メソッドの FieldData.java から取得されます。
実際の例外は次のとおりです。
フィールドを保護された一時的な int java.util.AbstractList.modCount にアクセス可能にできません: モジュール java.base は、名前のないモジュール @479d31f3 に対して「java.util を開きません」。
これは、安全でない機能がロックダウンされていることに関係していると思います。問題は、これを実行するにはどうすればよいですか?
私は次のようなプロパティを見てきました:
しかし、それがどのように見えるべきかを本当に伝えることはできません。