トップページtech
981コメント306KB

PHPがいかに駄目言語であるかをちゃんと説明

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/11/15(金) 20:57:08.46
age推奨で

他の言語と比較しながら、具体的にちゃんと説明してください!
0596デフォルトの名無しさん2014/03/10(月) 17:23:44.72
>>595
他スレの一部を転載するな
ブルートフォースアタックに関しての話だろ、あってるよ
0597デフォルトの名無しさん2014/03/11(火) 08:28:13.57
PHPerにジェネレーターを使えてる奴いるのかね?
0598デフォルトの名無しさん2014/03/11(火) 09:02:01.60
>>596
元をはっきりさせた上で使うのは、引用っていうんやで
0599デフォルトの名無しさん2014/03/11(火) 21:25:39.06
あのフレームワークが速い!爆速!とか煽り文句書いてるけど、
単にコンドームは薄い方が気持ち良いってだけ?
0600デフォルトの名無しさん2014/03/12(水) 01:47:49.84ID:4zZOK386
その理屈なら生最強だがそうはなってない
フレームワークというコンドームに求められるのは薄さより安心感的なものなんだろうな
俺俺フレームワークなんてまるで外出しテクを競う愚行というところか
0601デフォルトの名無しさん2014/03/12(水) 05:09:22.10ID:3SicOySt
__callが威力でかすぎて他の言語使える気がしない
0602デフォルトの名無しさん2014/03/12(水) 05:10:20.73ID:3SicOySt
今気付いたが強制ID始まったか、よかったよかった
0603デフォルトの名無しさん2014/03/13(木) 01:10:38.13ID:1g7vjGnB
初心者を脱するためのコラムにしか思えないものが
上級者になるためのコラムとは、さすがPHPerクォリティ
http://resocia.jp/column/368/
0604デフォルトの名無しさん2014/03/13(木) 01:35:34.90ID:AIWZ4REO
ざーっと読んで見たけど、「上級者になるために知っておきたいこと」って題ならこんな入り口内容でもいいんじゃねーの
「これを読めばあなたも上級者!」なら同じ感想だけどさ
言及弱くて、よくて「そもそもSPLとかさー」、とかの談義が始まりゃマシ程度のレスだな
ミスリード狙いっぽく読めるのがなんかどうもな
0605デフォルトの名無しさん2014/03/13(木) 09:11:21.29ID:LTbtGzLp
>>603
結局ひねくれて見えるんだよな、この手の記事
0606デフォルトの名無しさん2014/03/13(木) 10:24:05.81ID:1g7vjGnB
>>603
そこのコラムのもう一人の執筆者の肩書きが

PHP技術者認定機構 理事長
Rails技術者認定試験運営委員会 委員長

同じ穴か
0607デフォルトの名無しさん2014/03/13(木) 18:45:09.88ID:qaG+7LaQ
>>603
PythonやRubyを仕事で使うのを諦めた層は、そんな糞コラム読まないだろ
田舎零細企業でAccessやExcelを弄ってる40歳以上を想定してるはず
0608デフォルトの名無しさん2014/03/25(火) 09:02:21.24ID:UiDCLV+E
>>1 だって、作者自身がそう言ってたでしょ? 仕事やっつけのためだけに作ったって。
0609デフォルトの名無しさん2014/03/31(月) 17:25:09.15ID:WQVzru6S
ttp://fc2information.blog.fc2.com/blog-entry-1354.html
あれテストがない?と思ったらStaticまみれワロタ
0610デフォルトの名無しさん2014/04/09(水) 12:21:49.63ID:5hcMVv4L
PHP最近勉強し始めたんだけどHTMLコードって<?PHP?>の外に書くべきか中に書くべきか迷う
視認しやすさは絶対外に書いたほうだと思うんだけどいろんなプログラムのソース見てると
$header = <<< HTML 〜みたいなことして最期にechoしてるのが結構あったので気になった
実際どっちがいいの?
0611デフォルトの名無しさん2014/04/09(水) 18:03:12.55ID:sLXa1YUE
マルチポスト乙
0612デフォルトの名無しさん2014/04/12(土) 16:17:32.58ID:RuY08Pck
PHPが駄目言語であるかの様なデタラメを流布する
目的のスレがかえってPHPが優れている言語である
ことを証明してしまった。
糸冬
0613デフォルトの名無しさん2014/04/15(火) 09:10:13.92ID:LUmefa1W
>>612
perl 死んでる
ruby, py ハハッ それどうすんのさ

php 最強
0614デフォルトの名無しさん2014/04/20(日) 22:28:50.63ID:6zjHScac
aptanaっていうIDE使ってるんだけど、
pearライブラリーのコードアシストを出すには何か設定が必要なんですか?
それともドキュメント見ながらメソッド打たなきゃいけないんですか?

OSはwin8です。
0615デフォルトの名無しさん2014/05/31(土) 09:21:39.25ID:1YpY4EUA
なんでphpだけ専用スレないの?
0616デフォルトの名無しさん2014/05/31(土) 11:59:32.10ID:YgxuCMdP
php板はあるのにな
0617デフォルトの名無しさん2014/06/06(金) 02:56:12.95ID:UgiouvQd
PHPも嫌いじゃないけどCakeだけは勘弁して
0618デフォルトの名無しさん2014/06/22(日) 23:28:23.75ID:I40vD2Or
PHPでJava並にオブジェクト指向で書いたら、
すごく重いのですが、仕様ですか?
0619デフォルトの名無しさん2014/06/22(日) 23:40:50.98ID:dgCxS7of
それにはまず、重いという証拠を
だしてください。

話はそれからです。
0620デフォルトの名無しさん2014/06/23(月) 01:47:44.99ID:x59p+xZh
>>618
PHPがJAVAより遅いのは仕様です
PHPで単にオブジェクト思考にしたら遅くなったのだとしたら、あなたの能力の問題です
0621デフォルトの名無しさん2014/06/23(月) 11:36:05.41ID:2cPnnJRd
>>618
PHPが遅いというより、Javaが速いんだと思う。

ベンチマークによるけど概ねこんな感じ
Javaなどのコンパイラ系は速くて、スクリプト言語は軒並み遅い

http://d.hatena.ne.jp/kwatch/20100430/1272585083
> これを見れば、最速な言語は C/C++ であり、Java や Haskell や OCaml といった
> 静的な言語は軒並み上位に登場する。これに対し、Ruby や Python や
> PHP といったスクリプトは全部下のほう (つまり遅い)。

http://maplesystems.co.jp/blog/all/programming/2015/
> Java > C >>>> PHP > Python >> Ruby

http://akiniwa.hatenablog.jp/entry/2013/09/28/142947
> 結果をまとめると
>
> 言語 実行時間
> c 0.2741[s]
> java 1.7661[s]
> perl 11.9690[s]
> ruby 7.8373[s]
> python 12.2507[s]

http://www.akazah.com/lang-run/
> Cは当然一番早いがJavaはほとんど変わらない。
> Scalaは少し遅いけれど、その次のLuaとは一桁違う。
> ここまでコンパイル系。
> スクリプト系ではLuaが一番。
> その次のJRubyとはほぼ互角。
> PHPも案外早くて、Rubyがその次。
> Perlはとても遅い・・・。
0622デフォルトの名無しさん2014/06/25(水) 10:00:19.03ID:uLaDf7W/
>>621
> http://maplesystems.co.jp/blog/all/programming/2015/
> > Java > C >>>> PHP > Python >> Ruby

の部分、Cの速度は、gcc に最適化オプションをつけずにコンパイルした
255 msの場合で、最適化オプション -o をつけると 58ms となり、
Java の181ms よりも 3.12 倍も高速になる、とのことだよ。
0623デフォルトの名無しさん2014/06/25(水) 10:05:02.39ID:uLaDf7W/
なお、Java は整数演算は C/C++ の 1/3 程度の速度を持っているが、
メモリ確保が入ってくるととたんに性能が落ちる。

経験的には、同じ容量を確保した場合、C/C++ の 100倍〜1000倍
程度メモリを食うらしい。

さらに、Garbage Collection が不定期に実行されるので
スクロール中にガタガタと止まったりする。
無駄に多くメモリを消費するのも、GC の頻度が高くなる最大の原因
になってもいる。

Javaアプリの起動が遅いのは、アプリの初期化時にメモリ確保を一気に行うときに時間がかかって
居ることが主な原因。
0624デフォルトの名無しさん2014/06/25(水) 10:38:23.32ID:uLaDf7W/
訂正:

>経験的には、同じ容量を確保した場合、C/C++ の 100倍〜1000倍
>程度メモリを食うらしい。

ここは嘘だった。実際は、Javaの参照(ポインタ)は、C/C++よりも
ずっと容量を食うらしく、参照によってリンクを張った構造を
作ると C/C++ のポインタで同様の事を行った場合に比べて、
100〜1000倍のメモリ容量を食う。
0625デフォルトの名無しさん2014/06/25(水) 16:53:28.76ID:uLaDf7W/
なぜJavaがメモリを大量消費するかについて、自分なりの見解を述べ
よう。

・参照の変数の内部表現に必要なバイト数がC/C++のポインタに比べて
 大きい。ただし、大きいといっても、これだけで100〜1000倍にも
 なる理由の説明にはなりそうにはない。

・C/C++ では、オブジェクトを構造体やクラスの中に参照やポインタ
 を解さずにそのまま埋め込むことが出来たが、Javaでは必ず参照
 となるため、必ずヒープ(ストア)領域から new する必要があり、
 これが、複数のメンバを持つ一般的な構造体では意外と大量の
 メモリを食ってしまう可能性。 これについても、C/C++の経験
 では、「大した増加にはならない」と予想されるが・・・。
0626デフォルトの名無しさん2014/06/26(木) 07:46:08.82ID:H9MJZ09s
【追加】

・クラス・オブジェクトのサイズがとても大きい可能性。
 例えば、intのメンバ変数1つだけを持つC/C++の構造体のサイズは4バイト
 だが、Javaのクラスで同様のものを作ると、4バイト+100バイト程度に
 なっているのかもしれない。追加された「100バイト」の原因として
 考えられるのは、Java のあらゆるクラスのルート・クラスの「Object」
 のサイズ + クラスの継承時に付く何らかのデータやパディング。
0627デフォルトの名無しさん2014/06/26(木) 07:56:39.75ID:lRUtVmtM
いつからアンチJAVAスレになった
0628デフォルトの名無しさん2014/06/28(土) 17:01:39.43ID:A3rASK73
PHPって配列変数のシンタックスシュガー付いたんだ
あとは文字列操作をメソッド化してほしい
0629デフォルトの名無しさん2014/07/01(火) 21:05:42.50ID:GeIQQ2aO
見解とか妄想してないで知りたかったらソース読めよw
0630デフォルトの名無しさん2014/07/02(水) 16:21:25.63ID:fvFaAf5b
>>629
誰に言ってるの?
0631デフォルトの名無しさん2014/07/02(水) 16:41:49.10ID:UOkv1KGW
なるべく他の処理を止めないように、
今では、JavaのGCは一度にやらず、
10msごとに小刻みに行う

また、使うメモリの量が増えると、
GCにかかる時間も増える
0632デフォルトの名無しさん2014/07/05(土) 10:04:44.86ID:e1V2szvr
>>631
経験的には、Javaは、C/C++ の 100〜1000倍のメモリを食う。
これは、Swingなどの動的ライブラリの大きさが大きいというだけではなく、
アプリ独自のデータに対しての話。C++なら300Kバイトもかかるかかからないか
のような場合でも、Javaでは、150MBくらい消費した。
つまり、500倍程度。
0633デフォルトの名無しさん2014/07/05(土) 11:38:22.81ID:mAp+Ajil
経験的()
0634デフォルトの名無しさん2014/07/05(土) 12:19:36.06ID:atmyUkOz
いつからアンチJAVAスレになった

他の言語を叩くやつって何か抜けてる奴が多い
0635デフォルトの名無しさん2014/07/05(土) 16:54:43.41ID:e1V2szvr
>>634
話の流れじゃん。
頭が固い人には創造的結果は出来ないよ。
0636デフォルトの名無しさん2014/07/05(土) 16:58:20.65ID:e1V2szvr
>>633
嘘だと思うなら実測してみなよ。
0637デフォルトの名無しさん2014/07/05(土) 17:48:34.11ID:DUJJhZn/
>>632
それは嘘だと思います。

実測データ出せますか?
0638デフォルトの名無しさん2014/07/05(土) 18:19:52.16ID:e1V2szvr
>>637
うーん。絶対間違い無い、と確信できるほどの厳密な調査はして無い。
しかし、

・見た目の上では自作アプリは設計通りの動作をしていること。
 今議題にあがっているデータは見た目でデータ構造が一目瞭然
 になるような物で、間違っていれば分かると思えること。

・メモリ使用量を見ると(たしか)150MB 程度で、それが原因で GC
 が高頻度で起きており、JVMのメモリ量を変更することで大幅な
 GC頻度の減少が見られた事。

・もし、同じことを C/C++ でやれば、ほぼ 200KB 程度であると予測
 出来るし、使用容量の見積もりはそれほど難しくないように思えた
 事。もし多めに見積もっても、1MB は超えないであろうと思える。
0639デフォルトの名無しさん2014/07/05(土) 18:30:06.21ID:lG7Vks4t
メモリ使用って、どうやって調べてんの
タスクマネージャならなんの値をメモリって言ってる?
ランタイムが大きい分メモリを消費するのは当たり前なんだが
0640デフォルトの名無しさん2014/07/05(土) 18:40:42.15ID:e1V2szvr
>>639
そのとき色々確認したが、大量のメモリを使っていることは確実に
思えた。
0641デフォルトの名無しさん2014/07/05(土) 18:45:33.74ID:e1V2szvr
あと、本質的にはランタイムの大きさではなかった。
なぜなら、オブジェクトの作成を、画面で見えている部分だけに
限定するように修正してみたら大幅に使用量が改善したから。
もしC++だったら、そのような工夫をしなくても余裕だったのが、
プログラムの手間や複雑さが増大してしまったが。
0642デフォルトの名無しさん2014/07/05(土) 18:49:46.37ID:pJl1PMF0
嘘こけ
0643デフォルトの名無しさん2014/07/05(土) 19:00:25.28ID:e1V2szvr
>>642
嘘をついているつもりは無い。
もしかして、試したこと無いで言ってる?

Javaで実際的なアプリを作った経験が有る人は少数派だろうけど、
自分はその「少数派」に当たるかも。

そもそもやってみたことが無い人が多い中で、自分はやってみた
結果で話しているよ。
0644デフォルトの名無しさん2014/07/05(土) 19:12:35.24ID:5Xg0uObF
Javaは仮装マシン動かすからな
0645デフォルトの名無しさん2014/07/05(土) 19:30:12.00ID:DUJJhZn/
+αが必要なだけで、
一つのオブジェクトあたりの
メモリ使用量は変わらないんだよな。
0646デフォルトの名無しさん2014/07/05(土) 19:34:53.19ID:3zLRhjeW
>>625-626
を読んでみた?
0647デフォルトの名無しさん2014/07/05(土) 19:37:24.83ID:1SwtShn+
何でまだJavaの話してんの?
0648デフォルトの名無しさん2014/07/05(土) 19:51:45.11ID:3zLRhjeW
>>647
なぜ、そんな了見が狭いの?
0649デフォルトの名無しさん2014/07/05(土) 20:30:06.08ID:pJl1PMF0
>>643
試したことなく適当こいてるのはお前だろ
0650デフォルトの名無しさん2014/07/05(土) 20:31:59.12ID:3zLRhjeW
>>649
いや、実際的なアプリ製作での実体験に基づいているよ。
0651デフォルトの名無しさん2014/07/05(土) 20:33:00.76ID:3zLRhjeW
まあいいや、信用できないと思うんなら、無視してもいいよ。
こんなんで訴訟なんて起こされても困るし。
0652デフォルトの名無しさん2014/07/05(土) 20:39:10.12ID:pJl1PMF0
>>651
平気で嘘を吐いても良心が痛まない人って居るよね
0653デフォルトの名無しさん2014/07/05(土) 20:42:31.51ID:zqYTQuxN
"思う""予想できる""多分"
0654デフォルトの名無しさん2014/07/05(土) 21:57:34.45ID:lG7Vks4t
VM上で動くんだからメモリ使用量が不利なのは当たり前

単に作りが悪くてメモリリークしてるとか、GCの効率を妨害してるとか、そういうことを検証しないで経験とかで言われてもね

> 考えられるのは、Java のあらゆるクラスのルート・クラスの「Object」
> のサイズ + クラスの継承時に付く何らかのデータやパディング。
Objectのサイズってなに?仮装関数テーブルとか?それがインスタンスごと複製されちゃうのか?
0655デフォルトの名無しさん2014/07/05(土) 22:38:24.14ID:rZ0JUFAI
そもそも
> Javaで実際的なアプリを作った経験が有る人は少数派だろうけど、
> 自分はその「少数派」に当たるかも。
とか言ってる時点でお察し。
Javaで実用アプリ書くなんて珍しくもなんともないだろ。こいつの視野が狭いことが予想されるし、どうして150MBも食うのかもろくに分析してないんだろうな。
てかC++で書いて計測したわけじゃなくてC++の方は予測なんだろ?
もしかして、試したこと無いで言ってる?w
0656デフォルトの名無しさん2014/07/06(日) 00:30:25.23ID:QUzsj6Vp
なぜJavaのメモリの話になっているのか謎だが、
Javaのオブジェクトは.classやらhashCodeやらのヘッダ情報で必ず8バイト食うので、
メモリ使用量で不利になるとの情報あり。これだからプリミティブ型とかでみみっちい事しなきゃならない。
しかし結局オートボクシングのおかげで無駄にオブジェクトが生成されるわけだが
Javaオブジェクトのメモリ構造
http://www.codeinstructions.com/2008/12/java-objects-memory-structure.html
0657デフォルトの名無しさん2014/07/06(日) 04:16:12.79ID:XAawtdmz
今時のパソコンのメモリ量で気にすることじゃないだろ
0658デフォルトの名無しさん2014/07/06(日) 07:41:01.36ID:dl4OC7T3
>>654
>Objectのサイズってなに?仮装関数テーブルとか?それがインスタンスごと複製されちゃうのか?

Java は、どんなクラスも、基本基底クラスなるものがあって、それが
「Object」クラス。例えば、自前で
class CMyData {
 int x;
}

というクラスを作ったとしても、CMyData は、Object クラスを継承して
しまう。なので、少なくとも、
sizeof(CMyData) >= sizeof(Object) + sizeof(int)
となる。
0659デフォルトの名無しさん2014/07/06(日) 07:48:52.93ID:dl4OC7T3
>>655
まあ、一般プログラマの「予想」と、オイラの「予想」の予測精度の高さ
は違うんだけど、それは匿名掲示板では伝えることが出来ないから、
なんとでも言えてしまうよ。
0660デフォルトの名無しさん2014/07/06(日) 07:57:56.20ID:dl4OC7T3
>>656
intメンバだけを持つクラスでも、暗黙のHEADERの8バイトの他に、
Objectがnewされて、その参照が追加される。
しかも、boolean (1bit)には、8バイトアラインが付き、8バイトも消費
される。byteも4byteアラインが付く。

これだけでも、C++より遥かにメモリ容量を食っている事が分かる。
実際はもっと凄いことになっているよ。
0661デフォルトの名無しさん2014/07/06(日) 08:20:21.04ID:dl4OC7T3
>>654
>単に作りが悪くてメモリリークしてるとか、GCの効率を妨害してるとか、
>そういうことを検証しないで経験とかで言われてもね

オイラは、実際に、最高レベルのプログラマだと評価が有る。
めったなことでは間違わないよ。
0662デフォルトの名無しさん2014/07/06(日) 09:46:48.12ID:HgdZEROT
JavaとC++じゃ利用シーンが違うだろ。
てかいい加減スレ違いだからやめろ。レベルな高いプログラマならこんなとこじゃ無くて、ブログにでも書けや
0663デフォルトの名無しさん2014/07/06(日) 10:19:41.20ID:lHEQcTu3
察してあげてください

最高レベルのプログラマは間違えないのです
0664デフォルトの名無しさん2014/07/06(日) 10:25:13.41ID:ZmPBc803
節子それ人間やない機械や
0665デフォルトの名無しさん2014/07/06(日) 14:55:58.47ID:dl4OC7T3
100〜1000倍というのはひょっとしたら間違っているかも知れない事は
認めよう。しかし、数十倍であることは、まず間違いない。
0666デフォルトの名無しさん2014/07/06(日) 15:01:09.07ID:ikMLm2G0
ところで >>622 のリンク先に一応突っ込んどくと、

gcc で -O3 付けたら、そもそも sumup は一度も呼ばれない。
sumup は副作用のない関数で戻り値が代入される result もローカル変数だろ。
その result は main の後の処理で使われないだろ。

だから gcc の最適化器は main 関数の中にある for 自体を丸ごと全部消す。
printf して終わるだけのバイナリができる。
0667デフォルトの名無しさん2014/07/06(日) 16:13:41.57ID:c4JqBC4F
>>661
最高レベルなら予想とかじゃなくてOpenJVM解析して正しい結果出してくれる?

というか、ミスをしないとか言っちゃってる地点でたいしたやつじゃないか
0668デフォルトの名無しさん2014/07/06(日) 16:18:11.30ID:dl4OC7T3
>>667
そんな暇じゃない。
0669デフォルトの名無しさん2014/07/06(日) 16:20:59.87ID:JKxWpx0K
同じ物同士の比較である限りは
数十倍であることがまず間違いないのなら
100〜1000倍というのはまず間違っているということになるわけだが
0670デフォルトの名無しさん2014/07/06(日) 16:22:15.18ID:ZmPBc803
数十倍と1000倍って凄い差ですね
0671デフォルトの名無しさん2014/07/06(日) 16:22:40.22ID:dl4OC7T3
ああ、「少なく見積もっても数十倍であることがまず間違いない」
の書き間違いだった。すまん。
0672デフォルトの名無しさん2014/07/06(日) 16:31:50.40ID:tlPqhdeM
そんなコロコロ発言が変わる人の言うことなんて信用できるわけがない
0673デフォルトの名無しさん2014/07/06(日) 16:36:59.55ID:dl4OC7T3
信用しない人は信用しなくてもいい。
じゃあ、Javaでも「C++ で必用な容量とほぼ同じ」と信じていてください。
一向に構いません。そう信じて損するのもあなた、得するのもあなたです
から。
0674デフォルトの名無しさん2014/07/06(日) 16:42:00.47ID:ZmPBc803
流石に苦しい
JavaがC++に比べればかなりの容量を食うのは皆知ってるだろ
君が適当に出した100〜1000倍って数値とその後のレスの内容が怪しいと突っ込まれただけ
最初から数十倍ならここまで反応はなかったよ
0675デフォルトの名無しさん2014/07/06(日) 16:44:46.61ID:dl4OC7T3
>>674
>JavaがC++に比べればかなりの容量を食うのは皆知ってるだろ

それは発耳。

オイラがここで言わなかったら、ほとんど誰も知らなかったと思うが。
0676デフォルトの名無しさん2014/07/06(日) 16:54:08.91ID:khAlvNFC
容量ってメモリのことか?

5年くらい前のXNAの本で読んだ話だが、C#とC++を比較して、
CPU性能はC++の80%ほど、メモリは2倍消費するくらいを目処にするといいらしい

メモリは2倍消費するというより、仮想マシンはとりあえず2倍確保しておいて、
それをメモリプールとしてスタンバイさせておくのだろうね
0677デフォルトの名無しさん2014/07/06(日) 16:58:29.43ID:ikMLm2G0
public class heaptest {
  public static void main(String[] args) {
    SimpleObj[] objs = new SimpleObj[100];
    for (int i = 0; i < 100; i++) {
      objs[i] = new SimpleObj();
    }
    try { Thread.sleep(180 * 1000); } catch (Exception e) {}
  }
}
class SimpleObj {
  public int i;
}

$ javac heaptest.java
$ java heaptest &
$ jmap -dump:format=b,file=heaptest.hprof <PID>
$ jhat heaptest.hprof

これで 7000 番にサーバが立つからブラウザで http://localhost:7000 を開いて見ていけば
どういうオブジェクトがどれだけメモリを使ってるか分かる。
SimpleObj 1 個で 20 バイト。
0678デフォルトの名無しさん2014/07/06(日) 16:59:22.11ID:dl4OC7T3
>>676
Java のメモリ消費量は、C++ の2倍程度などという生易しいものではない。
0679デフォルトの名無しさん2014/07/06(日) 17:00:18.62ID:ikMLm2G0
<PID> のところは ps でプロセス ID を調べて入力する。
動いているプロセスに attach してダンプを取る仕組みだから Thread.sleep で終わらせないようにしているわけ。
0680デフォルトの名無しさん2014/07/06(日) 17:03:28.26ID:dl4OC7T3
スマンが、今はテストするほど暇が無いので、おいらは何もしない。
0681デフォルトの名無しさん2014/07/06(日) 17:06:01.78ID:ikMLm2G0
JVM はオブジェクトの representation については特に仕様で決まってるわけじゃないのか。知らなかった
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.7

20バイトってのは64bit版のOpenJDK1.7調べ
0682デフォルトの名無しさん2014/07/06(日) 17:07:27.69ID:tlPqhdeM
即レスするほど張り付いてID赤色の暇人がなんか言ってるよ
0683デフォルトの名無しさん2014/07/06(日) 17:10:54.74ID:dl4OC7T3
考え事してる合間に投稿してる。
今は考える事こそが自分のやるべきことだから。
0684デフォルトの名無しさん2014/07/06(日) 17:20:22.01ID:tlPqhdeM
「下手の考え休むに似たり」とはこの事だなw
0685デフォルトの名無しさん2014/07/06(日) 17:23:05.74ID:dl4OC7T3
なんのこっちゃ。
0686デフォルトの名無しさん2014/07/06(日) 17:34:37.76ID:c4JqBC4F
>>675
さすがに知ってるわ
GCもないC++の方が総じてメモリとか速度は優れてるに決まってる

ところで、JavaはC#みたいに値型導入しないの?
0687デフォルトの名無しさん2014/07/06(日) 17:45:08.97ID:dl4OC7T3
>>686
メモリを数十倍も食うのをどこで知ったの?

WebPageがあるなら、URLをどうぞ:
0688デフォルトの名無しさん2014/07/06(日) 17:53:50.20ID:ikMLm2G0
ソース追っかけてみたけど、これの oopDesc にある _mark と _metadata が 8*2 で 16 バイト分なのかな。
http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/c7f3d0b4570f/src/share/vm/oops/oop.hpp

PHP しか使わないから Java のことは全然わからん。
誰か詳しい人教えてくれ。
0689デフォルトの名無しさん2014/07/06(日) 18:15:07.74ID:dl4OC7T3
当然のことだけど、クラスの使用バイト数だけを調べても駄目なのは
分かっているよね? さらに、参照の表面的なバイト数だけでも駄目。

参照が表面的に 4 バイトしか使ってない様に見えても、ユーザー
ランドでは見えない関連データが沢山存在している可能性が有る。
例えば、GCの「ウォーク」を行うためのリンクポインタなど。

また、new CMyData の場合、CMyData の内部表現のサイズが
分かっただけでは意味が無いことも分かってる?
0690デフォルトの名無しさん2014/07/06(日) 18:30:07.48ID:c4JqBC4F
手近なところだとWikipediaとか
http://ja.m.wikipedia.org/wiki/Java%E3%81%AE%E6%80%A7%E8%83%BD
詳しくは書いてないけど、何と無くとか、経験的にとか、可能性とかいうのよりはマシ

ウォークっての検索したけどうまくでない
なんか別の言い方ある?
0691デフォルトの名無しさん2014/07/06(日) 18:47:01.26ID:dl4OC7T3
このようなものを調査するには、ソースを見るより実験して、
OS標準のタスクマネージャーなどでメモリ使用量を見るのが最も
正確。Javaの付属ツールのようなものが表示するのが実メモリ使用量
だとは限らない。個々のオブジェクトのサイズなどを表示しても
余り意味は無い。JVM全体でどれだけ使用しているかが大事。

Javaのクラスライブラリの初期メモリ使用量 + オブジェクトの確保に
伴うメモリ使用量

となるので、オブジェクトを増やしたときの変化の様子を見ると良い。
0692デフォルトの名無しさん2014/07/06(日) 18:54:07.35ID:8H24GUT0
> OS標準のタスクマネージャーなどでメモリ使用量を見るのが最も正確。

それがそうでもないんだよな。

たとえばアプリってのは小さいメモリ、1KB未満とかね。
そういったサイズを何個も生成する。

でも、その小さい単位毎にOSからメモリ要求したら
パフォーマンスが悪い。だからある程度固まったブロックで
メモリ要求をする。

つまりアプリで使用しているが、実際には空きであることがおおいんだよ。
でもアプリ内の空きメモリはOSからみれば使用中扱い。

だから実際に使用しているメモリとタスクマネージャのメモリをみても
正確なことはわからないんだよね。

だからJavaは専用のツールを用意している。
0693デフォルトの名無しさん2014/07/06(日) 19:07:44.59ID:ikMLm2G0
>>689 >>691
大変参考になりました。感謝します。
0694デフォルトの名無しさん2014/07/06(日) 19:30:04.71ID:DB81ilAH
いい加減Javaの話はやめろ。プログラミング言語は読めても、日本語は理解できないのか?
せめてPHPのメモリの話をしろ
0695デフォルトの名無しさん2014/07/07(月) 01:38:10.57ID:WuDwAVLf
最高のプログラマさんは
GC制御したことないのだろうな
メモリ消費量が多いプログラムもしたことがないのだろうな
■ このスレッドは過去ログ倉庫に格納されています