パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Java 1.4SE正式リリース」記事へのコメント

  • 未だにJava人気あるんですね。
    僕はいまいちJavaの良さが分かりません。
    誰かJavaのすばらしさを語ってもらえないでしょうか。
    • 「Java は駄目」とか言う人の話をよく聞いてみると、
      Java Applet のことだったり、 JavaScript のことだったりする
      ことがあるので、いっかい問い詰めてみたほうがいいです。
      • 僕がJavaで駄目だと思うところはまず実行速度です。
        JITの技術がありますが本質的な解決策では無いと思います。
        しかもテキスト処理なんかはJITを使ってもAwkよりもPerlよりも遅い。

        次に移植性です。
        Write Once Run Anywareとか言っていますがはっきり言って実現されて無いと思います。
        移植性 + 速度
        で考えるとCの方が上だと思っています。

        GCを利点として挙げる人がいますが、それも僕はどうかと思っています。
        GCがあるためにむちゃくちゃなプログラムでもある程度動いてしまいます。
        1時間ぐらいだったら動くけど長時間動かしているとVMが落ちることがありますし、その時のバ
        • > GCを利点として挙げる人がいますが、それも僕はどうかと思っています。
          > GCがあるためにむちゃくちゃなプログラムでもある程度動いてしまいます。
          > 1時間ぐらいだったら動くけど長時間動かしているとVMが落ちることがありますし、その時のバグを見つけるのが非常に大変です。

          C だって「解放忘れ」なら同じ現象が起こるでしょー。

          Java は free を
          --
          # mishimaは本田透先生を熱烈に応援しています
          • C だって「解放忘れ」なら同じ現象が起こるでしょー。

            少し違うと思います。
            Cで動的に確保されたメモリブロックは、明示的に解放しない限り、(少なくとも)そのプロセスの生存中は回収されないのに対して、Javaの場合は、他から参照されなくなったオブジェクトは、ガベージコレクタによって自動的に回収されます。(そもそも、解放するという操作自体がない)
            また、

            Java は free を呼ぶ替わりに使わなくなったポインタに逐一 null を入れろ、ってだけ。

            これも、ガベージ

            • ちょっとスレッドの流れを読み直して頂きたいが。

              > > C だって「解放忘れ」なら同じ現象が起こるでしょー。
              > 少し違うと思います。
              > Cで動的に確保されたメモリブロックは、明示的に解放しない限り、(少なくとも)そのプロセスの生存中は回収されないのに対して、Javaの場合は、他から参照されなくなったオブジェクトは、ガベージコレクタによって自動的に回収されます。(そもそも、解放するという操作自体がない)

              ?よく意味が分からん。
              短時間では問題はないが、長時間動かすとVMが落ちるようなプログラム、
              というのは明らかにメモリを食い潰しているのであって、
              C でこれと同じ状況は「解放忘れ」で簡単に起こる、というだけのことだろう。

              > > Java は free を呼ぶ替わりに使わなくなったポインタに逐一 null を入れろ、ってだけ。
              > これも、ガベージコレクタがオブジェクトを回収する際の「ヒント」を与えるために使われるテクニックであって、必ずしなければならない、というものではありません。

              一般論ではもちろんそうだが、
              メモリ不足でVMが落ちる、なんて状況では必須だろう
              (そうでなければGCが回収しているはずなんだから)。

              #「ポインタ」は不適切だったな。すまん
              --
              # mishimaは本田透先生を熱烈に応援しています
              親コメント
              • by k6p (7828) on 2002年02月16日 17時43分 (#63557)
                C でこれと同じ状況は「解放忘れ」で簡単に起こる、というだけのことだろう。
                Javaのオブジェクト解放漏れで起こるのと同じ状況がCのメモリブロック解放忘れで起こるといっていたのですね。たしかに、状況そのものについてのコメントを、状況の起こるメカニズムについてのものと読み違いしていたようです。
                > > Java は free を呼ぶ替わりに使わなくなったポインタに逐一 null を入れろ、ってだけ。
                > これも、ガベージコレクタがオブジェクトを回収する際の「ヒント」を与えるために使われるテクニックであって、必ずしなければならない、というものではありません。

                一般論ではもちろんそうだが、
                メモリ不足でVMが落ちる、なんて状況では必須だろう
                (そうでなければGCが回収しているはずなんだから)。
                オブジェクト同士の意図しない循環参照などを断ち切る(その結果ガベージコレクタが回収できるようにする)ためにnullを代入すべきだということであれば同意します。
                が、Cでfreeを呼ぶ代わりに、Javaではとにかくnullを代入すればよいという風に読めたので。それだと、Cのメモリ管理のやり方とJavaのやり方を混同されかねないと思いました。
                結果的に同じことじゃないかといわれそうですが、解放が(プログラムの指示によって)能動的に行われるか、(VMの働きによって、プログラム側から見ると)受動的に行われるかという概念の違いは大きいのではないかと思います。
                親コメント

クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人

処理中...