Java初心者のためのスレッドです。
※前スレ
Java入門・初心者質問スレ Part.8
http://mevius.5ch.net/test/read.cgi/tech/1528370228/
探検
Java入門・初心者質問スレ Part.9
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2019/03/09(土) 23:59:15.92ID:ACok0wnJ433デフォルトの名無しさん
2020/02/25(火) 20:12:02.68ID:fUZzeBhm >>432
君はどういう現場を何ヵ所ぐらい巡った事あるの?
君はどういう現場を何ヵ所ぐらい巡った事あるの?
434デフォルトの名無しさん
2020/02/25(火) 20:19:28.15ID:zjCVDX3d 基幹、金融(銀行、為替)、携帯ゲーム、スマホアプリ
10年以上
もちろん全部エクリプソだ
おまえらゴミが趣味でやるプリョグラミングとは全然ちがうよ
10年以上
もちろん全部エクリプソだ
おまえらゴミが趣味でやるプリョグラミングとは全然ちがうよ
435デフォルトの名無しさん
2020/02/25(火) 20:45:05.80ID:WVhKb5qT >>434
弟子にしてください!!
弟子にしてください!!
436デフォルトの名無しさん
2020/02/26(水) 00:37:03.85ID:whUbLD/1 イヤです!!
437デフォルトの名無しさん
2020/02/26(水) 09:26:42.27ID:b8tbrO4B かといって一人の人間が体験できる事には限りがある。
全ての現場を同時には体験できないからアンケートを取ったりしない限りは全体の現状はわからない。
自分の体験からだけではなくそういったアンケートの結果もないと信憑性は低いまま「へー。君はそういう体験をしたんだ」で終わる話になる。
全ての現場を同時には体験できないからアンケートを取ったりしない限りは全体の現状はわからない。
自分の体験からだけではなくそういったアンケートの結果もないと信憑性は低いまま「へー。君はそういう体験をしたんだ」で終わる話になる。
438デフォルトの名無しさん
2020/02/26(水) 09:55:42.14ID:9WVZFPHA うちの親戚みんなヘビースモーカーだったけど長生きしたぞ!だからタバコが身体に悪いなんて嘘!みたいな話だな
その経歴ならスマホアプリが盛った部分でないとしても案件少ないだろうし
その経歴ならスマホアプリが盛った部分でないとしても案件少ないだろうし
439デフォルトの名無しさん
2020/02/26(水) 11:20:55.80ID:QGbVs5AT とりあえず上のレス2つはもう少しまともな文章書けるようになったほうがいい
誇張でもなんでもなしに何言ってるか全然わからんから
誇張でもなんでもなしに何言ってるか全然わからんから
440デフォルトの名無しさん
2020/02/26(水) 12:49:51.59ID:y3dFX5OK いやわかるやろ
441デフォルトの名無しさん
2020/02/26(水) 14:19:12.99ID:q+vU4LVz そういや俺の曾祖父は96で死ぬまで煙草吸ってたらしい。
442デフォルトの名無しさん
2020/02/26(水) 14:24:15.93ID:q+vU4LVz443デフォルトの名無しさん
2020/02/26(水) 14:48:18.66ID:QGbVs5AT 破綻した文章書いてる奴が相手に読解力ないとか言っても1_も説得力ないし
ただの馬鹿の逃げ口上
ビジネスではお前みたいな意味不明な屁理屈と破綻した文章は通用しない
相手が客ならただ無言で使えない奴認定されて干されるだけ
一つ勉強になったなアホ
ただの馬鹿の逃げ口上
ビジネスではお前みたいな意味不明な屁理屈と破綻した文章は通用しない
相手が客ならただ無言で使えない奴認定されて干されるだけ
一つ勉強になったなアホ
444デフォルトの名無しさん
2020/02/26(水) 15:08:42.76ID:EqJA10ZA どこが意味わからなくてどう破綻してるのか言ってみれば?
言えなければそれこそ説得力無いし
言えなければそれこそ説得力無いし
445デフォルトの名無しさん
2020/02/26(水) 16:02:50.53ID:rV5Bbt6b どうでもいいわ
なんでお前らすぐ煽りあいはじめるんだよ、不毛すぎるだろ
なんでお前らすぐ煽りあいはじめるんだよ、不毛すぎるだろ
446デフォルトの名無しさん
2020/02/26(水) 16:02:52.14ID:QGbVs5AT >どこが意味わからなくてどう破綻してるのか言ってみれば
大人は質問には答えてくれない
ワイは君たちの添削先生じゃないんでな
大人は質問には答えてくれない
ワイは君たちの添削先生じゃないんでな
447デフォルトの名無しさん
2020/02/26(水) 16:23:06.55ID:EqJA10ZA という逃げ口上ってネタかな
448デフォルトの名無しさん
2020/02/27(木) 20:14:42.89ID:444if5jT 逃げたな。
449デフォルトの名無しさん
2020/03/04(水) 00:23:27.00ID:dApziw6x 質問です。
コンストラクタのアクセス修飾子は、メソッドのアクセス修飾子と同じですか?
コンストラクタのアクセス修飾子は、メソッドのアクセス修飾子と同じですか?
450デフォルトの名無しさん
2020/03/04(水) 01:05:56.01ID:qy4ofkmR ググれカス
451デフォルトの名無しさん
2020/03/04(水) 04:24:48.10ID:kR2tqv2n 同じです!
452449
2020/03/04(水) 16:25:32.33ID:dApziw6x453デフォルトの名無しさん
2020/03/04(水) 16:40:51.32ID:qy4ofkmR グ グ れ カ ス
454デフォルトの名無しさん
2020/03/04(水) 17:24:03.70ID:pnfn8g6T >>452
public class Hoge {
private Hoge() {
}
}
のようなクラスの動作と使い方を考えてみたら良いです。
あと、コンストラクタは自動的に動くわけではないですよ。
public class Hoge {
private Hoge() {
}
}
のようなクラスの動作と使い方を考えてみたら良いです。
あと、コンストラクタは自動的に動くわけではないですよ。
455デフォルトの名無しさん
2020/03/04(水) 18:59:42.75ID:o0lNfGba メソッドはスコープ外だと呼び出せない
コンストラクタはスコープ外だとnewできない
コンストラクタはスコープ外だとnewできない
456デフォルトの名無しさん
2020/03/04(水) 23:02:27.56ID:kR2tqv2n Singleton とかは、コンストラクタを private にします!!
なぜなら、インスタンスを1つだけにしたいから、クラス外で new されたら困っちゃうからです!!
なぜなら、インスタンスを1つだけにしたいから、クラス外で new されたら困っちゃうからです!!
458デフォルトの名無しさん
2020/03/07(土) 06:58:34.72ID:9Yq1EkX9 質問です。
機能ごとにクラスを分けているのですが、
普通にクラスをインスタンス化して作る場合と、
static なメソッドを作る場合があると思います。
これらはどのように使い分けるべきでしょうか?
staticが静的なフィールドにアクセスするのは分かりますが、
ただそれだけの違いなんですかね
newせずに使えるので、メモリ的に極力staticで作るべきですか?
staticなメソッド内でもnewできるし、特に困らないのですが
sdkではよく使い分けられているので、違いが気になります。
機能ごとにクラスを分けているのですが、
普通にクラスをインスタンス化して作る場合と、
static なメソッドを作る場合があると思います。
これらはどのように使い分けるべきでしょうか?
staticが静的なフィールドにアクセスするのは分かりますが、
ただそれだけの違いなんですかね
newせずに使えるので、メモリ的に極力staticで作るべきですか?
staticなメソッド内でもnewできるし、特に困らないのですが
sdkではよく使い分けられているので、違いが気になります。
459デフォルトの名無しさん
2020/03/07(土) 08:55:03.14ID:Xru7mKy/ ググれカス
460デフォルトの名無しさん
2020/03/07(土) 09:10:36.47ID:+x6uH2X6 >>458
static にするのは、クラスの状態に依存しないユーティリティなメソッドだけ
クラスの状態に依存する場合は全部インスタンスメソッド
メソッド内でも new できるし特に困らないと言うのは、ちょっと何言ってるかわかんないっす
状態に依存しないメソッドで、そんなことする意味がない
static にするのは、クラスの状態に依存しないユーティリティなメソッドだけ
クラスの状態に依存する場合は全部インスタンスメソッド
メソッド内でも new できるし特に困らないと言うのは、ちょっと何言ってるかわかんないっす
状態に依存しないメソッドで、そんなことする意味がない
461デフォルトの名無しさん
2020/03/07(土) 10:53:38.80ID:NE7uf/mQ >>458
状態が必要かどうかで良いと思う
状態が必要かどうかで良いと思う
462デフォルトの名無しさん
2020/03/07(土) 11:09:13.44ID:+x6uH2X6 わいからも質問です!!
Primitive Value を、
スレッドAで書き込む+読み込む
スレッドBで読み込むだけ
この場合で、volatile だけでは同期化不十分なケースはありますか?
存在するなら教えてクレメンス!です!
…
自分で調べました!!!
答えは知ってます!
でも、他の人の意見も聞きたいので、自分の答えはしばらく内緒にしておきます!
Primitive Value を、
スレッドAで書き込む+読み込む
スレッドBで読み込むだけ
この場合で、volatile だけでは同期化不十分なケースはありますか?
存在するなら教えてクレメンス!です!
…
自分で調べました!!!
答えは知ってます!
でも、他の人の意見も聞きたいので、自分の答えはしばらく内緒にしておきます!
463デフォルトの名無しさん
2020/03/07(土) 11:58:08.06ID:Xru7mKy/ グ グ れ カ ス
464デフォルトの名無しさん
2020/03/07(土) 12:27:55.08ID:+mAoGX8g 完全にstaticなメソッドしかないクラスの使いどころの話と
混在するクラスでのstaticメソッドの使いどころの話で議論が変わってくる
後者は意味的にクラスそのものの振る舞いを定義するときに使う
実用的には定数と、ファクトリーメソッドであるgetInstance系に使うと思っていればいい
前者はSDKでは意外と数が少ない
SystemやVoidのような概念として単一で不変のもの
MathやCollectionsのような独立性の高いメソッドを緩いカテゴライズでまとめたもの
メモリ節約しつつ多態性が欲しいならシングルトンという手もある
混在するクラスでのstaticメソッドの使いどころの話で議論が変わってくる
後者は意味的にクラスそのものの振る舞いを定義するときに使う
実用的には定数と、ファクトリーメソッドであるgetInstance系に使うと思っていればいい
前者はSDKでは意外と数が少ない
SystemやVoidのような概念として単一で不変のもの
MathやCollectionsのような独立性の高いメソッドを緩いカテゴライズでまとめたもの
メモリ節約しつつ多態性が欲しいならシングルトンという手もある
465デフォルトの名無しさん
2020/03/07(土) 12:29:03.77ID:+mAoGX8g 一見状態を持たなそうなクラスだからといって安易にstaticばかりにするのは気を付けた方がいい
状態や前提を毎回引数で与える設計もできるのでオブジェクト志向から逸脱したコードが増えがちになる
状態や前提を毎回引数で与える設計もできるのでオブジェクト志向から逸脱したコードが増えがちになる
466デフォルトの名無しさん
2020/03/07(土) 12:40:20.54ID:meF2wfp3 staticおじさん「気分はstatic!」
467デフォルトの名無しさん
2020/03/07(土) 13:09:54.71ID:NE7uf/mQ >>462
ないと思う
ないと思う
468デフォルトの名無しさん
2020/03/07(土) 14:18:28.12ID:+x6uH2X6 >>467
違います!
答えのリンク貼っておきますね!
全部読むの面倒なら、コード例見るだけで分かると思います!
https://stackoverflow.com/questions/9868577/how-to-comprehend-the-variable-does-not-participate-in-invariants-with-other-st
違います!
答えのリンク貼っておきますね!
全部読むの面倒なら、コード例見るだけで分かると思います!
https://stackoverflow.com/questions/9868577/how-to-comprehend-the-variable-does-not-participate-in-invariants-with-other-st
469デフォルトの名無しさん
2020/03/07(土) 18:14:14.50ID:Xru7mKy/ 自演やめろゴミ
470デフォルトの名無しさん
2020/03/07(土) 18:27:15.44ID:NE7uf/mQ >>468
変数が一つだったらないってこと?
変数が一つだったらないってこと?
471デフォルトの名無しさん
2020/03/07(土) 18:28:27.29ID:NE7uf/mQ 複数の変数を書き換えるのをアトミックにやりたい
それはvolatileでは無理ですよって読み取ったのだけどあってるかな?
それはvolatileでは無理ですよって読み取ったのだけどあってるかな?
472デフォルトの名無しさん
2020/03/07(土) 18:29:04.20ID:NE7uf/mQ >>469
まあまあ、こういうの頭の体操みたいで楽しいじゃん
まあまあ、こういうの頭の体操みたいで楽しいじゃん
473デフォルトの名無しさん
2020/03/07(土) 19:21:02.25ID:+x6uH2X6 リンク先の本持ってるけど、日本語にするとこんな感じ
質問の条件は 1.は満たすが、2〜3を満たすかどうかは言われていない
2.の不変項は、 例にある、startTime < endTime が常に成り立つようなケースを言ってる
■ volatile 変数を使って良い条件
1.その変数への書き込みが変数の現在値に依存しない、または1つのスレッドだけが値を更新する
2.その変数が他のステート変数とともに不変項に関与していない
3.その変数がアクセスされるとき、ほかの理由でロックが必要とされない
…自分の言葉で書き直そうと思ったが、全く同じこと繰り返してるだけなのに気づいてやめた
まぁあれだね、スタート/エンドフラグ以外に volatile 使うのはやめたほうが良さげって話ね
質問の条件は 1.は満たすが、2〜3を満たすかどうかは言われていない
2.の不変項は、 例にある、startTime < endTime が常に成り立つようなケースを言ってる
■ volatile 変数を使って良い条件
1.その変数への書き込みが変数の現在値に依存しない、または1つのスレッドだけが値を更新する
2.その変数が他のステート変数とともに不変項に関与していない
3.その変数がアクセスされるとき、ほかの理由でロックが必要とされない
…自分の言葉で書き直そうと思ったが、全く同じこと繰り返してるだけなのに気づいてやめた
まぁあれだね、スタート/エンドフラグ以外に volatile 使うのはやめたほうが良さげって話ね
474デフォルトの名無しさん
2020/03/07(土) 19:29:28.43ID:+x6uH2X6 といいつつ、自分は、UI のコンフィグ的なやつを全部 volatile にしてぶっこんでるんだけどね…
UIスレッド以外の、DBやらProperty ファイルから読み込みたいから同期化はしないといかん(でも、synchronized めんどい)
あくまでアプリの設定値みたいなやつで、とりあえず自身の現在値に依存した書き込みや、他の変数と条件作るような値はなかったけど…
あんまり良くはないんだろうね
UIスレッド以外の、DBやらProperty ファイルから読み込みたいから同期化はしないといかん(でも、synchronized めんどい)
あくまでアプリの設定値みたいなやつで、とりあえず自身の現在値に依存した書き込みや、他の変数と条件作るような値はなかったけど…
あんまり良くはないんだろうね
475デフォルトの名無しさん
2020/03/07(土) 19:39:14.89ID:Xru7mKy/ 独り言で荒らすなゴミ
ブログにでも書いてろキチガイ
ブログにでも書いてろキチガイ
476デフォルトの名無しさん
2020/03/07(土) 19:50:24.86ID:kM7Orw13 MutexやReentrantLockを使っているところを、ReadWriteLock(Atomic***などを含む)で置き換えられるか?
と考えることはあっても、volatileにするかどうかはまず考えないだろう。
と考えることはあっても、volatileにするかどうかはまず考えないだろう。
477デフォルトの名無しさん
2020/03/08(日) 03:17:20.21ID:F9PCMLD5 長文のString を返すだけのメソッドが大量にあるクラスって、コードキャッシュ領域に大量のメモリ確保しますか?
それとも、各メソッドが呼ばれた時に、DB からのロードのようにオンデマンドでメモリ確保しますか?
それとも、各メソッドが呼ばれた時に、DB からのロードのようにオンデマンドでメモリ確保しますか?
478デフォルトの名無しさん
2020/03/08(日) 03:18:45.87ID:F9PCMLD5 長文のString を返すだけのメソッドが大量にあるクラスって、(クラスがロードされた時点で)コードキャッシュ領域に大量のメモリ確保しますか?
それとも、各メソッドが呼ばれた時に、DB からのロードのようにオンデマンドでメモリ確保しますか?
括弧内書き忘れました
それとも、各メソッドが呼ばれた時に、DB からのロードのようにオンデマンドでメモリ確保しますか?
括弧内書き忘れました
479デフォルトの名無しさん
2020/03/08(日) 04:38:49.57ID:dGkdYPVv ググれカス
コードキャッシュ領域ってなんだよ
まずJVMのクラスローダーの仕組みから調べて出直せ
回答見てても基本的知識ない奴等しかおらんから間違った回答しまくってるし
おまえらはもう全員回答するな
100万回ググれカス
コードキャッシュ領域ってなんだよ
まずJVMのクラスローダーの仕組みから調べて出直せ
回答見てても基本的知識ない奴等しかおらんから間違った回答しまくってるし
おまえらはもう全員回答するな
100万回ググれカス
480デフォルトの名無しさん
2020/03/08(日) 05:17:04.58ID:aOgn+sBu481デフォルトの名無しさん
2020/03/08(日) 05:18:46.89ID:dGkdYPVv グ グ れ カ ス
ゴミ
ゴミ
482デフォルトの名無しさん
2020/03/08(日) 06:53:05.65ID:F9PCMLD5 クラスローダってバイトコード読んでクラスをロードするから、
その読まれたバイトコードの機械語に相当する部分がJVMヒープ外のコードキャッシュ領域に保持されるって認識だったんだけど違ってるんかな
フィールド値の String は、ヒープの中の String Constant Pool って領域があってそこに確保されてる(String.intern() とかで確認できる)
というのはとりあえず基本的なこととして
メソッドの中のローカル変数の String は、メソッドがコールスタックに存在する時は当然JVMスタックに存在してるだろうけど、
メソッドがコールスタックにない時は、どうなってるのかなと
呼ばれた時に割り当てられるのか、クラスがロードされてれば呼ばれてないときもメモリが確保されてるのか
あと、すまんが例の人はすぐNGにするからそっちにレスしても見えんかも
その読まれたバイトコードの機械語に相当する部分がJVMヒープ外のコードキャッシュ領域に保持されるって認識だったんだけど違ってるんかな
フィールド値の String は、ヒープの中の String Constant Pool って領域があってそこに確保されてる(String.intern() とかで確認できる)
というのはとりあえず基本的なこととして
メソッドの中のローカル変数の String は、メソッドがコールスタックに存在する時は当然JVMスタックに存在してるだろうけど、
メソッドがコールスタックにない時は、どうなってるのかなと
呼ばれた時に割り当てられるのか、クラスがロードされてれば呼ばれてないときもメモリが確保されてるのか
あと、すまんが例の人はすぐNGにするからそっちにレスしても見えんかも
483デフォルトの名無しさん
2020/03/08(日) 07:00:46.66ID:F9PCMLD5 コールスタックに存在するときも、ローカルだろうが文字列リテラルの中身は、JVMスタックじゃなく、多分JVMヒープか(String 内のプール)
とりあえず、コールスタックにない時どうなってるのかという疑問はそのまままだあります
とりあえず、コールスタックにない時どうなってるのかという疑問はそのまままだあります
484デフォルトの名無しさん
2020/03/08(日) 07:12:55.76ID:dGkdYPVv コードキャッシュ領域なんて言葉はない
あと知識が滅茶苦茶&ぐちゃぐちゃでクラスローダーの基本的な動作以前に
メモリ領域の区別も理解できてない
調べた事を適当に解釈するんじゃなくて
一つ一つ整理することを覚えろ
もう1回だけアドバイスしてやる
グ グ レ 糞 ボ ケ カ ス
あと知識が滅茶苦茶&ぐちゃぐちゃでクラスローダーの基本的な動作以前に
メモリ領域の区別も理解できてない
調べた事を適当に解釈するんじゃなくて
一つ一つ整理することを覚えろ
もう1回だけアドバイスしてやる
グ グ レ 糞 ボ ケ カ ス
485デフォルトの名無しさん
2020/03/08(日) 09:30:41.35ID:Q/UcMpCA 自信を持てる事が1つしかない人が住み着いてるなぁ
486デフォルトの名無しさん
2020/03/08(日) 11:26:24.54ID:2fZbJlty ぐぐれかすで済まされてしまうと
そもそもこのスレはいらないことになってしまう
そもそもこのスレはいらないことになってしまう
487デフォルトの名無しさん
2020/03/08(日) 12:27:55.81ID:FBA+pquR それな
Java初心者のためのスレッドですと最初に宣言されてる
イライラの撒き散らちしの方が多くなってるならこのスレを見ないのが賢明
Java初心者のためのスレッドですと最初に宣言されてる
イライラの撒き散らちしの方が多くなってるならこのスレを見ないのが賢明
488デフォルトの名無しさん
2020/03/08(日) 13:49:00.36ID:hM31dvE+ >>473
なるほど
なるほど
489デフォルトの名無しさん
2020/03/08(日) 16:20:38.13ID:P5NrKt8/ >>482,483
大雑把に言うと、
(メソッド中に散らばっているようなものを含めて)ソースコード上でStringリテラルとして記述されている文字列は、
コンパイル時にclassファイルのコンスタントプールにまとめられて、
classロード時に(JVMヒープ上の)実行時コンスタントプールにロードされます。
この辺きちんと理解したいなら、ググるんじゃなくてJVMS読めばいいです。ちゃんと書いてあります。
(ところでこれ、入門・初心者の質問?)
大雑把に言うと、
(メソッド中に散らばっているようなものを含めて)ソースコード上でStringリテラルとして記述されている文字列は、
コンパイル時にclassファイルのコンスタントプールにまとめられて、
classロード時に(JVMヒープ上の)実行時コンスタントプールにロードされます。
この辺きちんと理解したいなら、ググるんじゃなくてJVMS読めばいいです。ちゃんと書いてあります。
(ところでこれ、入門・初心者の質問?)
490デフォルトの名無しさん
2020/03/08(日) 16:37:39.04ID:dGkdYPVv にわか知識からくる質問だから初心者レベルなのは間違いない
あと説明不足な上に回答不十分
自分の中で咀嚼できないなら回答レスはしないほうがいい
あと説明不足な上に回答不十分
自分の中で咀嚼できないなら回答レスはしないほうがいい
491デフォルトの名無しさん
2020/03/08(日) 17:09:44.06ID:F9PCMLD5 >>489
ありがとうございます
ということは、ローカルのStringリテラルもクラスロードした時点でメモリにはずっと載ってるイメージですかね
やっぱり長文はしっかり管理するなら外部ファイルから読んだ方が良さそうですね
ありがとうございます
ということは、ローカルのStringリテラルもクラスロードした時点でメモリにはずっと載ってるイメージですかね
やっぱり長文はしっかり管理するなら外部ファイルから読んだ方が良さそうですね
492デフォルトの名無しさん
2020/03/08(日) 17:18:26.01ID:dGkdYPVv 全然説明になってないからこんな風に全く理解してないんだよね
こうやって勝手に解釈して間違った知識を自分の脳に植え付けるってことを繰り返しちゃうんだよ
にわかども逝ってよし
激しく自演臭いけど
こうやって勝手に解釈して間違った知識を自分の脳に植え付けるってことを繰り返しちゃうんだよ
にわかども逝ってよし
激しく自演臭いけど
493デフォルトの名無しさん
2020/03/08(日) 19:06:41.84ID:Q/UcMpCA 自分では答えもせず回答者にケチをつけるだけのイライラ君
494デフォルトの名無しさん
2020/03/08(日) 21:53:57.00ID:P5NrKt8/ ごめんなさい、読み返してみたら>>489はいい加減すぎますね。
> classロード時に(JVMヒープ上の)実行時コンスタントプールにロードされます。
は
(classファイルのコンスタントプールの文字列は)
> classロード時に(存在してなければ)Stringのインスタンスとして(ヒープ上に)ロードされ
> そのStringインスタンスへの参照がクラスの実行時コンスタントプールに保持されます。
と書くべきでした。長いけど。
> classロード時に(JVMヒープ上の)実行時コンスタントプールにロードされます。
は
(classファイルのコンスタントプールの文字列は)
> classロード時に(存在してなければ)Stringのインスタンスとして(ヒープ上に)ロードされ
> そのStringインスタンスへの参照がクラスの実行時コンスタントプールに保持されます。
と書くべきでした。長いけど。
495デフォルトの名無しさん
2020/03/08(日) 22:07:06.38ID:P5NrKt8/ >>491
ソースコード上のStringリテラル由来の文字列(Stringのインスタンス)はクラスに紐付いているので、
クラスがアンロードされない限りヒープ上に確保され続けるのはその通りです。
ただ、「メモリを節約するために」文字列を外部化する、というのは一般的にはおすすめできません。
(もちろん、国際化対応などを考えると意味が無いわけではありませんが)
一応初心者スレなので、
他の方が「文字列って無駄にメモリを消費してるんだ」などと思い込んでほしくはないので、
念の為に書いておきます。
ソースコード上のStringリテラル由来の文字列(Stringのインスタンス)はクラスに紐付いているので、
クラスがアンロードされない限りヒープ上に確保され続けるのはその通りです。
ただ、「メモリを節約するために」文字列を外部化する、というのは一般的にはおすすめできません。
(もちろん、国際化対応などを考えると意味が無いわけではありませんが)
一応初心者スレなので、
他の方が「文字列って無駄にメモリを消費してるんだ」などと思い込んでほしくはないので、
念の為に書いておきます。
496デフォルトの名無しさん
2020/03/09(月) 08:30:09.11ID:5nsxMNcI >>495
詳しくありがとうございます
> ただ、「メモリを節約するために」文字列を外部化する、というのは一般的にはおすすめできません。
これは、UIやグラフィクスのメモリ消費に対して、文字列の消費するメモリが大した量でないという意味でしょうか?
Java の String はヒープ中では UTF-16 ですから、基本的には1文字 2byte、100文字200byte くらい、
ヘルプメッセージとかエラーメッセージとか、100文字1000個くらいあったら、20MB くらいですか
もちろん、クラスが使われなくなったらアンロードもされるかもしれないですが(アンロードの周期などの実装仕様は詳しく知らないです)
---
ちなみに上記の文字数が294文字でした
詳しくありがとうございます
> ただ、「メモリを節約するために」文字列を外部化する、というのは一般的にはおすすめできません。
これは、UIやグラフィクスのメモリ消費に対して、文字列の消費するメモリが大した量でないという意味でしょうか?
Java の String はヒープ中では UTF-16 ですから、基本的には1文字 2byte、100文字200byte くらい、
ヘルプメッセージとかエラーメッセージとか、100文字1000個くらいあったら、20MB くらいですか
もちろん、クラスが使われなくなったらアンロードもされるかもしれないですが(アンロードの周期などの実装仕様は詳しく知らないです)
---
ちなみに上記の文字数が294文字でした
497デフォルトの名無しさん
2020/03/09(月) 08:32:01.99ID:5nsxMNcI 失礼、20MB > 200KB ですね
498デフォルトの名無しさん
2020/03/09(月) 12:48:12.24ID:ZlKVPwI9 ググレカス
少しは質問する前に自分で試すかググったらどうだ?ん?
幼稚園児かお前は?ん?
少しは質問する前に自分で試すかググったらどうだ?ん?
幼稚園児かお前は?ん?
499デフォルトの名無しさん
2020/03/09(月) 17:45:24.63ID:CR1lspV9 ん?ん?
500デフォルトの名無しさん
2020/03/09(月) 18:34:19.48ID:ZlKVPwI9 クラスローダーの超基本的な動作すらわかってない奴等同士でレスつけてるから
間違ったことを延々とレス合ってるのが滑稽すぎて楽しいねw
なんだよクラスのアンロードってw
ggrks
間違ったことを延々とレス合ってるのが滑稽すぎて楽しいねw
なんだよクラスのアンロードってw
ggrks
501デフォルトの名無しさん
2020/03/09(月) 21:11:33.64ID:CR1lspV9 ん?ん?
502デフォルトの名無しさん
2020/03/09(月) 21:12:12.21ID:YzBqyBpd んん
503デフォルトの名無しさん
2020/03/09(月) 21:15:51.32ID:URBZWRA9 SwingWorkerクラスを繰り返し使うと10個デーモンスレッドができるんですけど、なんで1個だけじゃないんですか?
インスタンスを破棄するのを忘れているせいでしょうか?でも10回以上実行しても10個以上になりません。
インスタンスを破棄するのを忘れているせいでしょうか?でも10回以上実行しても10個以上になりません。
504デフォルトの名無しさん
2020/03/09(月) 21:19:44.52ID:ZlKVPwI9 ググれカス
505デフォルトの名無しさん
2020/03/09(月) 21:44:27.76ID:5nsxMNcI >>503
内部的に ExecutorService 使ってるから、何個も同時にexecute すれば、スレッドは1個じゃないよん!
System.out.println(Thread.currentThread().getName());
で通し番号的なの見れるから、確認したいならおすすめだよん!!
内部的に ExecutorService 使ってるから、何個も同時にexecute すれば、スレッドは1個じゃないよん!
System.out.println(Thread.currentThread().getName());
で通し番号的なの見れるから、確認したいならおすすめだよん!!
506デフォルトの名無しさん
2020/03/09(月) 21:53:35.55ID:5nsxMNcI new ThreadPoolExecutor(MAX_WORKER_THREADS, MAX_WORKER_THREADS,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<Runnable>(),
threadFactory);
この部分が SwingWorker の ExecutorService 実装の部分だよ!
スレッドプールを使ってて、10個のスレッドをプールして使うようになってるね!!
すぐ終了する Worker 走らせても、スレッドプールは次のタスクに備えるために、スレッドを10個まで残しておくよ!
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<Runnable>(),
threadFactory);
この部分が SwingWorker の ExecutorService 実装の部分だよ!
スレッドプールを使ってて、10個のスレッドをプールして使うようになってるね!!
すぐ終了する Worker 走らせても、スレッドプールは次のタスクに備えるために、スレッドを10個まで残しておくよ!
507デフォルトの名無しさん
2020/03/09(月) 22:08:08.58ID:ZlKVPwI9 クラスのアンロードとか言ってるアホは回答側にまわってはいけない
回答したくても自重するように
回答したくても自重するように
508デフォルトの名無しさん
2020/03/09(月) 22:09:35.45ID:ZlKVPwI9 と思ったら質問厨のアホか
君の回答は全部間違ってるので絶対に回答側にまわってはいけない
今後質問もしてはいけない
ググって勉強
君の回答は全部間違ってるので絶対に回答側にまわってはいけない
今後質問もしてはいけない
ググって勉強
509デフォルトの名無しさん
2020/03/09(月) 22:18:54.57ID:ZlKVPwI9 そもそもだな
初心者と初心者未満がマルチスレッドプログラミングをしてはいけない
初心者と初心者未満がマルチスレッドプログラミングをしてはいけない
510デフォルトの名無しさん
2020/03/09(月) 22:40:07.04ID:BCuofv/t ええやろ
511デフォルトの名無しさん
2020/03/10(火) 05:17:21.61ID:9vkl8TPx ハロワの求職者支援訓練に40代向けのJava講座あるんだけどプログラミングっておっさんでも始められるもんなん?
512デフォルトの名無しさん
2020/03/10(火) 05:26:08.30ID:3BlP5Izm プログラミングを始めるだけなら簡単
IT企業への就職の方がよっぽど難しい
IT企業への就職の方がよっぽど難しい
513デフォルトの名無しさん
2020/03/10(火) 05:36:19.04ID:9vkl8TPx >>512
IT業務は人手不足って聞いたけどそれでも高齢だと就職難しい?
IT業務は人手不足って聞いたけどそれでも高齢だと就職難しい?
514デフォルトの名無しさん
2020/03/10(火) 05:39:32.76ID:3BlP5Izm >>513
仕事を選ばなければあることはあるよ
仕事を選ばなければあることはあるよ
515デフォルトの名無しさん
2020/03/10(火) 05:54:32.14ID:9vkl8TPx >>514
そうですか、挑戦してみてもいいですかね。ありがとうございます
そうですか、挑戦してみてもいいですかね。ありがとうございます
516デフォルトの名無しさん
2020/03/10(火) 05:59:35.16ID:3BlP5Izm517デフォルトの名無しさん
2020/03/10(火) 06:08:16.69ID:9vkl8TPx >>516
なるほど。そうですよね。一度やってみます
なるほど。そうですよね。一度やってみます
518デフォルトの名無しさん
2020/03/10(火) 08:47:54.44ID:kYBXWStN >>506
ありがとうございます。正常な動作なんですね。安心しました。
ありがとうございます。正常な動作なんですね。安心しました。
519デフォルトの名無しさん
2020/03/10(火) 08:57:13.80ID:SOZ0FlFe 代替の回答もせずにケチつけるだけの異常者
520デフォルトの名無しさん
2020/03/10(火) 14:14:41.48ID:WfcRHOjd そんな人はいない、ただレス番が飛んでるだけ
521デフォルトの名無しさん
2020/03/10(火) 15:10:36.12ID:WfcRHOjd >>491
https://www.baeldung.com/java-string-pool#strings-allocated-using-the-constructor
回答間違いっぽくない?
Java7 以前は、StringリテラルがGCされることはなかったけど、
それ以降は、String リテラルは参照がなくなったらGCされる
あと、Java9 以降は、ヒープ上の文字コードもUTF-16だけじゃなくなってるね
一個適当な String リテラル使う Java のプログラム走らせて、参照消したあと System.gc() する
別のプログラムから、JNA経由とかで Kernel32の ReadProcessMemory で Java のメモリ読んで文字列の有無を確認
とかも面白そう
チートエンジンとかでも出来るんかな
https://www.baeldung.com/java-string-pool#strings-allocated-using-the-constructor
回答間違いっぽくない?
Java7 以前は、StringリテラルがGCされることはなかったけど、
それ以降は、String リテラルは参照がなくなったらGCされる
あと、Java9 以降は、ヒープ上の文字コードもUTF-16だけじゃなくなってるね
一個適当な String リテラル使う Java のプログラム走らせて、参照消したあと System.gc() する
別のプログラムから、JNA経由とかで Kernel32の ReadProcessMemory で Java のメモリ読んで文字列の有無を確認
とかも面白そう
チートエンジンとかでも出来るんかな
522デフォルトの名無しさん
2020/03/10(火) 15:17:15.01ID:WfcRHOjd あと、クラスのアンロードは、クラスローダの参照とインスタンスへの参照が全部なくならないとアンロードされない
システムクラスローダとかからロードしてるクラスの場合、一度読んだクラスはアンロードされない
システムクラスローダとかからロードしてるクラスの場合、一度読んだクラスはアンロードされない
523デフォルトの名無しさん
2020/03/10(火) 16:04:24.33ID:SOZ0FlFe そういう確認はメモリエディタが便利だね
524デフォルトの名無しさん
2020/03/10(火) 18:16:00.38ID:inz7zISD >>521
クラスがロードされる時に(classファイルの)コンスタントプールから(既存でなければ)生成されるStringインスタンスは、
クラスがそのStringインスタンスへの参照を(実行時コンスタントプールに)保持しているので、
そのクラスが生存している(アンロードされない)限り、
GCで回収の対象にはなりません。
(回収されてしまったら大変)
クラスがロードされる時に(classファイルの)コンスタントプールから(既存でなければ)生成されるStringインスタンスは、
クラスがそのStringインスタンスへの参照を(実行時コンスタントプールに)保持しているので、
そのクラスが生存している(アンロードされない)限り、
GCで回収の対象にはなりません。
(回収されてしまったら大変)
525デフォルトの名無しさん
2020/03/10(火) 19:24:51.92ID:WfcRHOjd >>524
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-3.html#jvms-3.4
> Data of types int, long, float, and double, as well as references to instances of class String, are managed using the ldc, ldc_w, and ldc2_w instructions.
[references to instance of class String] って書いてあるし、実体はそこに無いんじゃないの?
String pool の色んな説明見ても、String literal はGCされるって結論づけられてるのがほとんど
Run-time Constant Pool の説明見ても、単なる Symbol Table で、メモリ上の実体がそこにあるわけじゃないように思うんだけど
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-3.html#jvms-3.4
> Data of types int, long, float, and double, as well as references to instances of class String, are managed using the ldc, ldc_w, and ldc2_w instructions.
[references to instance of class String] って書いてあるし、実体はそこに無いんじゃないの?
String pool の色んな説明見ても、String literal はGCされるって結論づけられてるのがほとんど
Run-time Constant Pool の説明見ても、単なる Symbol Table で、メモリ上の実体がそこにあるわけじゃないように思うんだけど
526デフォルトの名無しさん
2020/03/10(火) 19:34:58.74ID:WfcRHOjd あぁごめん、参照で持ってるからこそプール上の String がGCされないって言ってるのか
527デフォルトの名無しさん
2020/03/10(火) 19:49:00.59ID:9vkl8TPx ここ本当に初心者スレなんですかね・・・
528デフォルトの名無しさん
2020/03/10(火) 20:00:32.03ID:WfcRHOjd https://stackoverflow.com/a/2433076
このコード実行してみて、System.gc() をコメントアウトしたときと比べてみると、やっぱり String Literal って GC されてるんじゃない?
new String してるんだけど、intern してるから、プール上の String が GC されてる証拠って言えるよねこれ
このコード実行してみて、System.gc() をコメントアウトしたときと比べてみると、やっぱり String Literal って GC されてるんじゃない?
new String してるんだけど、intern してるから、プール上の String が GC されてる証拠って言えるよねこれ
529デフォルトの名無しさん
2020/03/10(火) 20:06:45.70ID:WfcRHOjd なんどもすまん、でも、リテラルで持ってるわけじゃないのかこのプログラム
new String のところを、new String("fkasdjf;lsdkjfasdljfdlkfjadsfjsad;kljfadjfkdas;")
とかってすると、System.gc しても結局全部同じ値返したわ
ということは、ソースコードにリテラル直接書き込むと、クラス自体がアンロードされない限りやっぱりプールにずっと残るんか
うーん、もうちょっといろいろ試してみよう…
new String のところを、new String("fkasdjf;lsdkjfasdljfdlkfjadsfjsad;kljfadjfkdas;")
とかってすると、System.gc しても結局全部同じ値返したわ
ということは、ソースコードにリテラル直接書き込むと、クラス自体がアンロードされない限りやっぱりプールにずっと残るんか
うーん、もうちょっといろいろ試してみよう…
530デフォルトの名無しさん
2020/03/10(火) 20:36:01.83ID:inz7zISD531デフォルトの名無しさん
2020/03/10(火) 20:37:11.37ID:Lvz0sNoZ 基本がわかってないからゴミみたいな駄レスでスレを消費するアホども
いまだにクラスのアンロードとか言ってるしw
スレを荒らすなゴミども
SNSでやれゴミ
いまだにクラスのアンロードとか言ってるしw
スレを荒らすなゴミども
SNSでやれゴミ
532デフォルトの名無しさん
2020/03/10(火) 20:40:15.96ID:inz7zISD >>529
「Stringリテラル」ってのはその
"fkasdjf;lsdkjfasdljfdlkfjadsfjsad;kljfadjfkdas;"
の部分です。
>>528はStringリテラルを持たずにStringインスタンスを生成してintern()して、
intern()されたStringインスタンス(Stringプール入り)でもガベコレされるねっていう例でしょう。
>>529の様にStringリテラルをベースにStringインスタンスをnewすると、
同じ文字列のStringインスタンス(ロード時にintern()されてStringプールに確保されている)がすでに存在するので、
新しいStringインスタンスをintern()した結果はStringリテラルからのインスタンスが返されます。
Stringリテラルのインスタンスはクラスが参照を保持しているのでGCで回収されないので、
何回
new String("fkasdjf;lsdkjfasdljfdlkfjadsfjsad;kljfadjfkdas;").intern()
しても同じインスタンスが得られます。
「Stringリテラル」ってのはその
"fkasdjf;lsdkjfasdljfdlkfjadsfjsad;kljfadjfkdas;"
の部分です。
>>528はStringリテラルを持たずにStringインスタンスを生成してintern()して、
intern()されたStringインスタンス(Stringプール入り)でもガベコレされるねっていう例でしょう。
>>529の様にStringリテラルをベースにStringインスタンスをnewすると、
同じ文字列のStringインスタンス(ロード時にintern()されてStringプールに確保されている)がすでに存在するので、
新しいStringインスタンスをintern()した結果はStringリテラルからのインスタンスが返されます。
Stringリテラルのインスタンスはクラスが参照を保持しているのでGCで回収されないので、
何回
new String("fkasdjf;lsdkjfasdljfdlkfjadsfjsad;kljfadjfkdas;").intern()
しても同じインスタンスが得られます。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 空自機レーダー照射、音声データ公開 中国 ★3 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- ぶっちゃけ天のうって昭和天のうのせいで全然ありがたみないよな
- 頭悪いやつほどガンダムとかエヴァにハマるのってなんでなの?
- 犬って顔くっつけて寝たがるよな
- ゲームボーイのゲーム
- 『猟友会がクマ駆除を嫌がるなら潰すべき。職務を放棄するハンターから免許や銃を没収して罰金を取ろう』の声、ネットで上がる [932029429]
