- ベストアンサー
Javaのよさについて
結構前から、”これからはJavaを勉強した方がいい”と か、”インターネット関連のアプリにはJavaがいい (?)”とか言われてますよね。でも、JBuilderを使っ て、JBuilderのTutorialをやってみた感想は、すごく遅い と思うんです。なんだか動作の全てが...。Appletにして も、普通のモデムの人にとっては、Loadingの時間はかなり耐 え難いものがあると思います。そこで質問です 1.Javaは実際にはどのような場面で使われるのでしょう? 2.JavaでWinアプリを作る意味はあるのでしょうか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
下記のオーバーヘッドについてです。 HTTPではブラウザがwebサーバにリクエストを出して、webサーバが対象のファイルをブラウザに送り返し、そしてブラウザがそのhtmlや画像を解釈して表示されます。 一般にcgiと呼ばれるものの違いはサーバにあるものがhtmlや画像ファイルそのものではなく、プログラムであり、そのプログラムで処理した結果がブラウザに送られる、という事です。 それでcgiでよく使われるperlは通常webサーバがリクエストを受け取るたびにperlインタプリタを立ち上げ、処理をして結果を受け取りperlインタプリタを終了します。そのためリクエストが発生するたびにperlインタプリタの起動と終了というオーバーヘッドが発生します。 ServletではwebサーバとJavaインタプリタが一緒に起動してメモリ上に居座っているため、上記のperlインタプリタで発生したオーバーヘッドはありません。これが「Servletは早い」という売り文句になります。 というのが建前です。 実際はmod_perlと呼ばれるapacheというwebサーバの組み込みシステムがあるため、上記の事柄は現状ではほぼ当てはまりません。また、PHPというものもあり、これもwebサーバのプロセスとして実行されるため、違いはほとんどありません。 逆に開発時においてはPHPやperlの方が細かなテストがしやすいので楽なくらいです。 ただ、大規模開発になるとオブジェクト志向中居発のしやすさからJavaは良いと思いますけど。(PHPもPHPLIB使えばかなり楽に出来ますが、多少パフォーマンスが犠牲になる。)
その他の回答 (4)
- usap
- ベストアンサー率33% (525/1577)
JAVAをちょこっとかじったものです。 HTMLをしたあと、JAVAに興味を持ちました。 趣味で個人サイトを持っています。 はじめはjavascriptを知り、そのあとにJAVAでアプレットを作ってみました。 プログラムそのものはぜんぜんできませんが、私がJAVAをやろうと思ったのは、CやVBよりやりやすかったからです。CやVBだと、本格的にプログラムを設計して構築していかなくてはなりませんし、VBだとソフトが必要です。その点、JAVAはオブジェクト指向なので、プログラムの構造が単純に感じますし、エディターを起動してすぐに書き込むことができ、コンパイラも手軽で、アルゴリズムもよくわからない一般人の私でもわりとやりやすいです。プログラム自体が簡単で効率的にできてしまうところがJAVAの魅力じゃないかなぁと思います。私は複雑なプログラムではなく、web上で使えるアプリを簡単に作りたいと思ってJAVAをはじめました。ソフト開発など、専門家にとってはJAVAはそんなにおもしろいものではないのかな・・・(私は趣味なので、おもしろいのかも) JAVAアプレットで画像を表示させるだけだったり、マウスが乗って画面を変えるとか、画像すり替えくらいなら、JAVAよりもHTMLとかjavascriptのほうが表示も速いし、作るのももっとラクチンです。私が使うとしたら、動画を作ってみるとか、ゲームを作ってみるとか、チャットルームを作ってみるとか、そんな感じかもしれません。掲示板もJAVAでやれるみたいだけど、私はperlのほうが慣れてるのでperlでやってます。(間違いで無限ループ作ったらどうしよう、なんてちょっと心配。Cは私には無理だし、JAVAでやれるならそんな心配無用かなぁとか思ったりします。) HTMLやCSSやjavascriptでできないことをできるのがJAVAの良さかなぁと思っています。やっぱり、お手軽さってところなのかな(笑) プログラム初心者からでした(笑)参考程度に。
- terra5
- ベストアンサー率34% (574/1662)
1.Javaは実際にはどのような場面で使われるのでしょう? やはり、実行するOS等を選ばない状況で使われると思います。 インターネット関連のアプリケーションにもいいと言われているのは、 インターネットに接続する環境がWindowsだけとは言えず、いろいろな物があるからでしょう。 AppletがLoading時間がかかるのは確かですが, あまり意味が無いと感じるのは,やらせていることが 単純だったりするからのような気がします。 例えば,VBで作成したプログラムをダウンロードして 使うことと比較すると、Appletだから時間がかかるというわけではないことが分かると思います。 プログラムの勉強という意味では、VBなんかよりすっきりしてますので、やりやすいでしょう。 また、Cよりへんなことが出来ないという意味でも やりやすだろうと思います。 2.JavaでWinアプリを作る意味はあるのでしょうか? Windows上でしか動作させないなら、使う人にとってはあまり意味はないでしょうね。 作る人にとっては、Javaしか使えない,Javaだと作りやすい,JBuilderだと作りやすいという意味が ある人もいるでしょう。 ちなみにプログラムそのものは専門家ですが、Javaは手付かずです。
- alfeim
- ベストアンサー率58% (114/195)
#回答だけではないですが・・・ >WinアプリをC言語やビジュアルCで作成すると、 >膨大な命令文が長く、計算処理速度がかかります。 >WinアプリはWindowsのOS上で >動作させるためにブラウザーで使用されるJava命令は >C言語やビジュアルCでの処理速度を向上させている。 ?? 言ってる意味がよく分かりません。 どう考えてもNativeCodeアプリケーションの方がByteCodeアプリケーションよりオーバーヘッドがちいさいのは自明ですし、Javaは実行時束縛型のリンクシステムのため、関数呼び出しは静的束縛であるC/C++、VBなどに比べると一歩劣ります(VCに関しては仮想関数使えば一緒ですが・・・)。 また、動的結合のためにクラスシンボルなどを完全修飾名でclassファイルに保存するため、サイズも大きくなります。 さらにNativeCode系はグローバルな実行最適化を施せます。JavaでもNativeCodeに落とす事は出来るため、施せなくはないですが、そうした場合、Write once run anywhereの特徴は失われます(このWrite once run anywhereもかなり眉唾物ですが・・・)。 #ちなみに最近のCPUでは命令数がどうの・・・というよりもレイテンシを減らす方が効果があります。CPUキャッシュがミスヒットするだけで数十クロックのペナルティ食らうような状況になってますから。 また、 同じ処理を同じアルゴリズムで作成した場合、Javaの方が(バイトコード処理によるオーバーヘッドがあるため)NativeCodeに勝つ事は出来ません。 簡単に言えば(日本語のみを解する)日本人に仕事をさせる場合、日本語で直接命令する(NativeCode)のと、英語で翻訳者に翻訳させながら命令(ByteCode Interpreter)するのではどちらが効率的かは自明でしょう。 #基本的に否定派なんで否定的意見ばっかりだ(^^; Javaの長所を上げろ、といわれれば、個人的には開発におけるObject志向開発のしやすさ、だと思います。 一応C++を反面教師として作られただけあって、そのへんは(C++よりは)しっかりしています。 >インターネット関連のアプリにはJavaがいい に関してはServletの方についてではないでしょうか? 基本的にHTTP廻りに関してはsocket制御(こっちはServletEngineの仕事ですが)と文字列処理が主体なのでそれほどInterpreterである事が問題になりません(というより競合相手、PHPやPerl、ColdFusionもInterpreterなので差が無い、というのが正しいかも)。 また、ServletEngineを起動させれば、すべてメモリに読み込むため、httpリクエストによるオーバーヘッドが、他のcgi(PHPやperlなど)に比べると少ない事が上げられます。 <質問に対する回答> 1.Javaは実際にはどのような場面で使われるのでしょう? 私が知る限り、実用的なものはほとんどServletです。 昔はAppletも流行ましたが、最近ではほとんど見かけません。これはAppletの仕組み自体に問題があるような気もしますが(出来る事が限定されすぎているため)。 2.JavaでWinアプリを作る意味はあるのでしょうか? 「Winアプリ」を作る意味はほぼありません。ですがグロスプラットフォームなソフトを作る上では意味があるでしょう。JREがあれば、何処でも動く、というのがJavaの売りですから、いちいちUNIX版、Windows版と別々に開発する必要が無くなりますから。 #実際にはそれぞれのWindowシステムやOSアーキテクチャを調べ、依存部分だけを作り直せば移植は出来るので設計さえまともならばC/C++で作った方が良いと思いますが。 #学習する、という意味においてはいい言語だと思います。 #資料が多く、言語設計が比較的まともであり、クラスライブラリも豊富ですから。
補足
Javaが”遅い”と感じる理由がとても分かりやすかったで す。ありがとうございました。最後にもう一つ、出来たら お願いします。 >また、ServletEngineを起動させれば、すべてメモリに読 >み込むため、httpリクエストによるオーバーヘッドが、他 >のcgi(PHPやperlなど)に比べると少ない事が上げられま >す。 今さっき、e-WordsにてServletの意味をもう一回調べたの ですが、alfeimも書いてるように、”一度呼び出されると そのままメモリに常駐するため、高速な処理が可能であ る”とはどういう事でしょう?これはCGIはPCのキャッシュ にダウンロードされないので遅い、と考えてよろしいので しょうか?
- yasya
- ベストアンサー率29% (842/2899)
(1)は、はっきり言って、ネットでは使いづらい(書かれている通り、回線速度が遅いので)です。 主にソフトの結果表示に使われています。 Javaのサーブレットでフローチャートの動作をさせて、 Javaアプレットで表示させるのが現在主流です。 (2)は、WinアプリをC言語やビジュアルCで作成すると、 膨大な命令文が長く、計算処理速度がかかります。 WinアプリはWindowsのOS上で 動作させるためにブラウザーで使用されるJava命令は C言語やビジュアルCでの処理速度を向上させている。 という、私の旦那(Javaの初級資格をもっている) の言葉を代弁させていただきます。
お礼
細かいところまでわかりやすく説明していただいたにもか かわらず、返事が遅れて大変申し訳ありませんでした。自 分は、いまいち何を目標にプログラムを作ったらいいのか が、わかっていません。C++もJavaも壁にぶつかるごとに” こんなことやって、いったい何になるんだろう”って思っ てました。しかし、alfeimさんの説明で、どんなことを意 識して、Javaを勉強したらいいか、わかったような気がし ます。本当にありがとうございました。 また、その他の皆さんもありがとうございました。