問題タブ [java-memory-model]

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.

0 投票する
1 に答える
7389 参照

java - 4GBと8GBのRAMとこれの計算について言及できる-XX:MaxPermSizeサイズはどれくらいですか?

4GBと8GBのRAMについて言及できる-XX:MaxPermSizeサイズ。これが私のシステムの他の詳細です

OS:-ウィンドウXP(32ビット)RAM:-4 GB java_opt- -Xms1536m -Xmx1536m //(環境変数として言及):tomcatバージョン:-6.0.26

私は他の詳細がまったく同じである8GBのRAMを備えた別のシステムを持っています。はいosは64ビットのWindow7です。

これに加えて、両方のシステムの-Xmxパラメーターの最大値を教えてください。

この図を詰め込む必要がないように、誰かが図に到達するための計算を教えてくれるといいのですが、RAMシステムが持っていることに基づいて論理的に計算できますか?

私は実際に人々がpermgenエラーまたはヒープエラーを取得するのを見てきましたが、問題を解決することがわかるまで、すべての体がこのパラメーターで遊んでいます。

0 投票する
0 に答える
2876 参照

java - システム構成の最大ヒープサイズと最大 perm gen サイズを見つけるためのプログラム/アプローチ?

最大ヒープ サイズと最大 permgen スペースをテストするには、Gilliが Windows の Java プロセスあたりの最大メモリ量で提案した返信に従って? 、システムを出力するだけのmainメソッドを持つ単純なJavaクラスを作成しました

以下のパラメーターを使用してコンソールからクラスを実行すると、正常に実行されましたが、2048 で、エラー could not reserve が発生しました オブジェクト ヒープに十分なスペースを予約できませんでした。これは、システムの最大ヒープ サイズが 1536 から 2048 の間で許容されることを意味します。

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.htmlのリンクによると、

64 ビット Java を実行している場合、オペレーティング システムが Java プロセスに提供するメモリ空間は非常に大きくなります。したがって、Java ヒープとネイティブ ヒープの間のメモリ リソースの競合により、Java ヒープの最大サイズに制限が課されていないと見なすことができます。

だから私は 8 GB のメモリを持っているので、なぜ VM はオブジェクト ヒープに十分なスペースを予約できなかったのでしょうか?

2 番目に必要なのは、システムの最大 permgen サイズを見つけることです。だから私は以下のパラメータで同じプログラムを実行しました

しかし、再び、オブジェクトヒープに十分なスペースを予約できませんでしたと表示されます。Windows7 64ビットOSで8GB RAMを持っているので、どうすればそれが可能ですか。そして、permgen に 128m も許可しないのですか? 私はここで何かが欠けていると確信していますが、それを理解することはできませんか?

0 投票する
2 に答える
478 参照

java - スレッド間でデータを渡すときに Java でメモリの可視性を確保する方法

一部のスレッドがデータを作成し、そのデータのチャンクを他のスレッドによって消費されるように定期的に渡すパターンのような生産者消費者があります。

Java メモリ モデルを念頭に置いて、コンシューマ スレッドに渡されるデータが完全に「可視化」されるようにするにはどうすればよいですか?

このために特別に構築された ConcurrentLinkedQueue のような java.util.concurrent のデータ構造があることは知っていますが、それらを利用せずにできるだけ低レベルでこれを行い、カバーの下で何が起こっているかを完全に透過的にしたいと考えています。メモリ可視化部分。

0 投票する
1 に答える
2231 参照

android - アプリケーションのアクティビティ メソッドを渡すコマンド パターンは?

@RomainGuy によるメモリ リークの回避の記事を読んだ後、現在の Android アプリケーションが、アプリケーションのメイン アクティビティを渡すという間違いに悩まされていることに気付きました。そのため、いつでもそのアクティビティ パラメータをActivity.getApplicationContext()に置き換えることができます。

しかし、私のアプリケーションには、アプリケーションのメイン アクティビティのメンバーにしかできないメソッドを実行する必要がある特定のクラスがあります。

したがって、コマンド パターンを使用してこの制限を回避することを考えていました。

問題は、その例を見ると、次のことです。

私は再びアクティビティの周りのパスを必要とする行き止まりに直面しています (今回はObjectデータとして偽装されています)。

この「鶏が先か卵が先か」の状況から抜け出すにはどうすればよいでしょうか。

この問題にアプローチするより良い方法はありますか?

0 投票する
2 に答える
2407 参照

java - Javaメモリモデルで説明されている初期化の安全性について説明してください

  1. Javaメモリモデルで必要とされる初期化の安全性を説明できる人はいますか?
  2. 最終フィールドは、初期化の安全性を達成するのにどのように役立ちますか?
  3. 初期化の安全性を確保する上でコンストラクターはどのような役割を果たしますか?
0 投票する
3 に答える
4596 参照

java - 巻き上げと並べ替えは同じですか?

私はEffectiveJavaから、同期がない場合、以下のシーケンスAを仮想マシンによってシーケンスBに変換できることを読みました。これは、と呼ばれhoistingます。また、変数が揮発性命令として宣言されていない場合、変数を含む命令を並べ替えることができることもどこかで読みました。巻き上げと並べ替えは同じですか?

0 投票する
3 に答える
2145 参照

java - メインメモリへの/からの同期データ読み取り/書き込み

同期メソッドが完了すると、それによって変更されたデータのみがメイン メモリにプッシュされますか、それともすべてのメンバー変数がプッシュされますか?キャッシュ内のメンバー変数とその値をメイン メモリから読み取りますか? 例えば

上記のコードでは、compute が threadA によって実行され、getResult が threadB によって実行されると想定しています。compute の実行後、threadA はメイン メモリを a と b で更新するか、a、b、c と d を更新します。getResult を実行する前に、threadB はメイン メモリから b と c の値のみを取得しますか、それともキャッシュをクリアしてすべてのメンバー変数 a、b、c、および d の値をフェッチしますか?

0 投票する
5 に答える
1149 参照

java - 可視性の適時性に関する volatile の詳細なセマンティクス

を検討してくださいvolatile int sharedVar。私たちは、JLS が次の保証を提供することを知っています。

  1. プログラム順で値のw書き込みに先行する書き込みスレッドのすべてのアクションは、書き込みアクションです。isharedVarhappens-before
  2. 読み取りスレッドによる値の読み取りの成功iによる値の書き込み。w happens-beforeisharedVarr
  3. 読み取りスレッドによるiからの読み取りの成功プログラム順の後続のすべてのアクション。sharedVarr happens-beforer

ただし、読み取りスレッドがいつvalue を監視するかについては、実時間の保証はまだありませんi。値がこのコントラクトに準拠していることを読み取りスレッドに認識させない実装。

私はこれについてしばらく考えましたが、抜け穴は見当たりませんが、抜け穴があるに違いないと思います。私の推論の抜け穴を指摘してください。

0 投票する
2 に答える
813 参照

java - Javaでのメモリ割り当て-Android

私が持っている場合:

このコードが実行されると、4つのインスタンスのうちどれがまだメモリに残っていますか?.recycle()がネイティブコードにすべてのリソースの割り当てを解除するように指示していることは知っていますが、それがいつ発生するかは保証されていません。

私が尋ねている理由は、次のループを見てみましょう:

これは最終的にアプリをクラッシュさせる(メモリ不足)と思いますか?もしそうなら、このループはどのように書き直されるべきですか?(ビットマップを使用して、変更された状態をアニメーション化および表示している場合)。