【初心者】Java質問・相談スレッド112【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/02/08(金) 19:48:24JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/
過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド111【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1200151522/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。
次スレは>>980あたりで。
0553デフォルトの名無しさん
2008/02/20(水) 13:12:04現在linuxにtomcatを入れて開発を行っているのですが自動起動に失敗してしまいます。OS起動後に直接起動スクリプトを実行すると正常に起動します。
環境とバージョン
CentOS5.1 32bit/jdk6/tomcat6
ログには以下のような出力があります。
文字制限に引っかかるため一部省略します。
--
2008/02/20 11:47:00 org.apache.catalina.connector.Connector pause
致命的: プロトコルハンドラの一時停止に失敗しました
java.net.SocketException: Network is unreachable
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:209)
at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:486)
at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:283)
at org.apache.jk.server.JkMain.pause(JkMain.java:681)
at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153)
2008/02/20 11:47:01 org.apache.catalina.core.StandardService stop
情報: サービス Catalina を停止します
以下試したこと。
・自動起動を一番最後に持って行った(rc3.d/S99tomcat)
・F/Wの自動起動を停止
どなたか解決策をご存じの方がいたら教えてください。
0554デフォルトの名無しさん
2008/02/20(水) 13:14:380555デフォルトの名無しさん
2008/02/20(水) 13:31:36eth0にグローバル、eth1にローカルを設定しています。
また、iptablesにてグローバルは25番のみIN/OUTを許可、ローカルは全て許可に設定しています。
iptablesの自動起動も止めてみたのですが、解決しませんでした。
0556デフォルトの名無しさん
2008/02/20(水) 19:00:05アプレットを使って画像を表示させたいのですが、
アプレットビューアを起動するコマンドを打つと上手く表示されるのですが
html形式のファイルを直接開くと画像が切れて表示されてしまいます。
htmlファイルを直接開いたときに画像が切れないように表示させるには
どうすればいいでしょうか?
よろしくお願いします。
0557553
2008/02/20(水) 19:11:40環境変数がちゃんと読めていなかったようです。
0558デフォルトの名無しさん
2008/02/20(水) 20:17:04例えば-5を5にしたいです。
どなたかおたすけを・・・
0559デフォルトの名無しさん
2008/02/20(水) 20:18:130560デフォルトの名無しさん
2008/02/20(水) 21:17:13lock();
func();
unlock();
みたいな
0561デフォルトの名無しさん
2008/02/20(水) 21:44:070562デフォルトの名無しさん
2008/02/20(水) 21:45:15http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Semaphore.html
0563デフォルトの名無しさん
2008/02/20(水) 21:49:58それだ。サンクス
0564デフォルトの名無しさん
2008/02/20(水) 22:17:07Tが一つのクラスだけだったらスーパークラスは一つだけですよ。
スーパーインターフェースなら妥当でしょうか
0565デフォルトの名無しさん
2008/02/20(水) 22:42:05superclassとdirect superclassの違いも知らないのか?
0566デフォルトの名無しさん
2008/02/20(水) 22:43:080567556
2008/02/20(水) 23:10:18アプレットを作るにはxxx.javaとxxx.htmlという2つのファイルを作りますよね
xxx.javaをコンパイルしてxxx.htmlというファイルに対してAppletviewerの
コマンドを実行してやるとその際に表示されるアプレットは画像が切れずに
キレイに表示されるのですが、xxx.htmlというファイルをクリックして
直接表示しようとすると画像が切れてしまいます。
画像が切れないように表示するためにはどうすればいいのでしょうか?
よろしくお願いします。
0568デフォルトの名無しさん
2008/02/20(水) 23:13:130569デフォルトの名無しさん
2008/02/20(水) 23:13:400570デフォルトの名無しさん
2008/02/21(木) 00:19:41↑見たいな感じで"<="を使いたいんですけどどうしたらいいですか?
0571デフォルトの名無しさん
2008/02/21(木) 00:32:130572デフォルトの名無しさん
2008/02/21(木) 00:32:32xは1〜18のいずれかで、かつ
yは0
ってこと?
if( (x >= 1 && x <= 18) && y==0 )
0573デフォルトの名無しさん
2008/02/21(木) 01:36:17ああ画像が切れるってそういう意味なのか。
0574デフォルトの名無しさん
2008/02/21(木) 10:26:40HashMap<Integer,String>[] map = new HashMap<Integer,String>[3];
という配列を作ろうとしたときに、コンパイルしようとしたら
汎用配列を作成します。
というエラーが出てしまいます。調べてみてもさっぱり理解できません。
よろしければご教授お願いします。
0575デフォルトの名無しさん
2008/02/21(木) 10:39:29ジェネリクスはコンパイル時のチェック機能。
コンパイルした後は HashMap という型情報しか存在しない。
よって、その型の配列が作成される。
0576デフォルトの名無しさん
2008/02/21(木) 11:48:490577デフォルトの名無しさん
2008/02/21(木) 15:47:43contextA/auth/AuthServlet
contextA/noauth/NoAuthServlet
web.xmlで/auth/*を認証ゾーンとして指定。
NoAuthServlet内から、プログラマーが自前でユーザIDとパスワードを使って/auth/*ゾーンの認証を済ませたいのですが
どうすればできるでしょうか?
認証を済ませる=HttpServletRequest#getUserPrincipal() != nullという意味です。
0578デフォルトの名無しさん
2008/02/21(木) 16:00:26初心者丸出しの質問ですみません。
同じパッケージ内のクラスを使うにはどうしたらいいのでしょうか?
よろしければご教授お願いします。
0579デフォルトの名無しさん
2008/02/21(木) 16:15:59それらのパッケージ名とクラス名は何でしょう?
それと、何を何処までやって出来なかったのか。
0580デフォルトの名無しさん
2008/02/21(木) 16:37:00ところでマルチポストって知ってる?
0581デフォルトの名無しさん
2008/02/21(木) 17:15:41正三角形の中点を中心に1回転させるにはどうすればいいですか?
マルチスレッドとアフィン変換を利用して回転させたいんですが、角度を細くするほど誤差?で変形してしまいます。今のとこ30゜ぐらいが限界です!
下手文ですみません
0582デフォルトの名無しさん
2008/02/21(木) 18:03:50JDBC、EJB、Hibernate、これらはどういう関係にあるんでしょうか?
例えばEJBを実装すればJDBCやHibernateは要らないのでしょうか?
自分が調べた限りでは、
実際の開発ではEJBが普通だが、小規模な開発ではHibernateを使い、もっと単純なものならJDBCで済ます
って印象なんですがこんな感じで当たってますか?
0583デフォルトの名無しさん
2008/02/21(木) 18:07:280584デフォルトの名無しさん
2008/02/21(木) 18:26:46abstract void calc(int i);
void printNum(int i) {
System.out.println(i);
}
}
class ExTest extends Test {
void calc(int i) {
int j=i*i;
printNum(j);
class ExTest2 extends Test {
void calc(int i) {
int j=i+i;
printNum(j);
public class sample46x {
public static void main(String[] args) {
int i =5;
int j;
Test[] ex_test = new Test[2];
ex_test[0]=new ExTest();
ex_test[1]=new ExTest2();
for(j=0; j<2; j++);
ex_test[j].calc(i);
これなんですけどコンパイルはできるんですけど、実行するとこんなの出ます。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at sample46x.main(sample46x.java:28)
どこが原因なんでしょうか?
0585デフォルトの名無しさん
2008/02/21(木) 18:36:370586デフォルトの名無しさん
2008/02/21(木) 18:38:24>for(j=0; j<2; j++);
これだな
0587デフォルトの名無しさん
2008/02/21(木) 18:51:20渇っ!
0588デフォルトの名無しさん
2008/02/21(木) 19:23:00どういう方法があるでしょうか。
0589デフォルトの名無しさん
2008/02/21(木) 19:24:440590デフォルトの名無しさん
2008/02/21(木) 19:30:03java.lang.Runtime#exec
>>589
http://java.sun.com/javase/ja/6/docs/ja/platform/rmi/spec/rmiTOC.html
0591デフォルトの名無しさん
2008/02/21(木) 19:33:26Runtime#execはEJBからは使えないはず
0592デフォルトの名無しさん
2008/02/21(木) 19:40:43なんで?使えるよ、ふつーに
0593デフォルトの名無しさん
2008/02/21(木) 20:52:38DB関連のAPIが林立しているのは、APIの進化変遷の跡。
最初から使い分けを意図して作られた物じゃない。
初期のEJBは詰め込みすぎで設計がクソで生産性が低いので、
小さくない規模の開発でも、Hibernateなどの他のマッピングフレームワークは使ってたよ。
0594デフォルトの名無しさん
2008/02/21(木) 21:38:57FileInputStream fis = new FileInputStream(file);
FileChannel srcChannel = fis.getChannel();
// 一つのデータは 2 byte (16 bit)
ByteBuffer buffer = ByteBuffer.allocateDirect(length * 16);
buffer.order(ByteOrder.LITTLE_ENDIAN);
// 読み込み
srcChannel.read(buffer);
srcChannel.close();
fis.close();
buffer.clear();
int ch1, ch2;
for(int i = 0; i < 1000; i++){
ch1 = buffer.get() & 0xff;
ch2 = buffer.get() & 0xff;
data[i] = (ch1 | (ch2 << 8)) & 0xffff;
}
buffer.clear();
int[] data という配列に
バイナリファイル中の符号なし short を読み込みたいのですが、
getShort() をつかったら、符号ありで読まれてしまったので、上のようなコード
でやっています。
処理が遅い(無駄計算が多い)気がするのですが、もっと良い方法はありますでしょうか
0595デフォルトの名無しさん
2008/02/21(木) 22:10:42上記のような文字列が部分的に含まれているファイルを
SQLに入れる作業をしているのですが、
これを読み込むとunrecognized tokenエラーが出ます
このような文字の扱いはどのようにすればよいでしょうか
0596デフォルトの名無しさん
2008/02/21(木) 22:12:11data[i] = buffer.getShort() & 0xffff
でダメかね?
0597デフォルトの名無しさん
2008/02/21(木) 22:33:16ファイル読み込むときのエンコーディング正しく指定してる?
0598デフォルトの名無しさん
2008/02/21(木) 22:33:39どっちも変わらない?
0599デフォルトの名無しさん
2008/02/21(木) 22:46:140600デフォルトの名無しさん
2008/02/21(木) 22:47:40それともやられにくいって意味か?
基本的にJavaはネイティブにしない限りソースへ復元は簡単な方
C#はどんだけネイティブ系使っているか次第
0601デフォルトの名無しさん
2008/02/21(木) 22:53:410602582
2008/02/21(木) 23:00:01ありがとうございます。
色んなベンダから別々に色んな技術が生まれてカオスな状態という感じでしょうか
デフォになってるものも無いようなので自分で色々試してみます。
0603594
2008/02/21(木) 23:02:25ああ、なるほどー。と思って実装してみたら、逆に少し遅くなりました。(データは正しく読めてました)
以下のようなコードを書いてベンチマークしても、やっぱり遅くなってましたorz
public class ReadTest {
public static final int length = 3800 * 2600;
public static int[] data = new int[length];
public static ByteBuffer buffer;
public static void main(String[] args){
try{
buffer = ByteBuffer.allocateDirect(length * 16);
buffer.order(ByteOrder.LITTLE_ENDIAN);
for(int i = 0; i < 20; i++){ read1(); read2(); read2(); read1(); System.out.print(".");}
long t = System.currentTimeMillis();
for(int i = 0; i < 10; i++){ read1(); }
System.out.println("\r\n" + (System.currentTimeMillis() - t) + " ms");
t = System.currentTimeMillis();
for(int i = 0; i < 10; i++){ read2(); }
System.out.println((System.currentTimeMillis() - t) + " ms");
} catch (Exception e){}
}
public static void read1() throws Exception{
FileInputStream fis = new FileInputStream(new File("hoge"));
FileChannel srcChannel = fis.getChannel();
for(int i = 0; i < 4; i++) fis.read(); // ヘッダ
buffer.rewind();
srcChannel.read(buffer); srcChannel.close(); fis.close(); // 読み込み
buffer.clear();
for(int i = 0; i < length; i++){ data[i++] = buffer.getShort() & 0xffff;}
}
/* read2 は読み込み部分が古いほう(省略) */
うーん、不思議ですねえ。 getShort() は遅いんでしょうか。。。
でかい画像を大量に処理していて、読み込みが25%くらい閉めているので、短くしたい・・
0604594
2008/02/21(木) 23:04:310605デフォルトの名無しさん
2008/02/21(木) 23:05:21やられにくいって意味でとらえてください
>>601
そうですか、使いやすくて良い言語だけど自分が作ったソフトが逆コンパイル
されるのは困るな
企業で開発するときは何か対策しているのでしょうか?
0606デフォルトの名無しさん
2008/02/21(木) 23:17:500607デフォルトの名無しさん
2008/02/21(木) 23:28:14ありがとうございます
UTF-8で読み込んでいます
System.out.println("แอมเพอร์แซนด์");
これでエラーになるのはなんででしょうか
0608デフォルトの名無しさん
2008/02/21(木) 23:29:100609デフォルトの名無しさん
2008/02/21(木) 23:57:00CDを管理するプログラムを作っているのですが、mainクラスとCDクラスがあります。
管理する数は、5つでその分のCDインスタンスをつくり、価格と名前のを入力しコレクションで管理すると言うプログラムです。(重複可で名前でソートさせます)
このプログラムを作ってみたのですが、Collections.sort(list);としたのですが、下線のびっくりマークのエラーが出てしまいます。
内容は、『型の安全性:型Collectionの総称メソッドsort(List<T>の未検査の呼び出しsort(List)がありました』と表示されてしまいます。
このようなエラー表示にはどのような対処をしたら良いのでしょうか?
アドバイスお願いします。
0610デフォルトの名無しさん
2008/02/21(木) 23:59:26-source 1.4
をコンパイルオプションに付ける
0611デフォルトの名無しさん
2008/02/22(金) 00:01:32JDKレベルを1.4にする
0612デフォルトの名無しさん
2008/02/22(金) 00:06:39Eclipse 3.1を使ってます。5.0から1.4にするという感じでよいのでしょうか?
コンパイルオプションの変え方がわからないので調べてみます。
0613デフォルトの名無しさん
2008/02/22(金) 00:42:51JDK5以降で言語仕様に入れられたジェネリクスというものに関わるエラー。
「java ジェネリクス」で調べてみて。
eclipseならリファクタリング機能の中に、
ジェネリクスを使用していないソースを使用するように変更してくれる機能もあるけど、
とりあえず、ジェネリクスを理解してからにしたほうがいい。
0614デフォルトの名無しさん
2008/02/22(金) 00:45:18アドバイス、ありがとうございます。
ひとまず、1.4に変更したところちゃんと動作しました。ジェネリクスの勉強もしてみます。
0615デフォルトの名無しさん
2008/02/22(金) 01:30:47真剣な質問です
また、女性関係に強い言語は何でしょうか?
0616デフォルトの名無しさん
2008/02/22(金) 02:04:39他でやれ
0617デフォルトの名無しさん
2008/02/22(金) 03:18:36今コードを書くためのエディタを探しています。
よいエディタを紹介していただけませんか?
0618デフォルトの名無しさん
2008/02/22(金) 05:53:510619デフォルトの名無しさん
2008/02/22(金) 09:05:49Javaと.NETどちらとも、逆コンパイラはある。
どっちも中間言語を使うタイプなので、逆コンパイラを作りやすいらしい。
そしてその対策として、obfuscator(難読化ツール)がどちらにもある。
単に、シンボル名(クラス名、メソッド名、変数名)をランダムな文字列に
置き換えて、逆コンパイラが出力したソースを読みにくくする、
ってだけだけど。
0620デフォルトの名無しさん
2008/02/22(金) 10:00:34初心者には難しいので入門書の段階では取り扱わないからか
それとも基本1.4で5.0要素は申し訳程度にしか書いてない本が
未だに主流だからか
0621デフォルトの名無しさん
2008/02/22(金) 10:21:520622デフォルトの名無しさん
2008/02/22(金) 11:27:58このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
0623デフォルトの名無しさん
2008/02/22(金) 11:38:09俺のとこでは依頼される仕事も未だに1.4全盛なんだよなー。他の会社の人に聞いてもそうだという。5.0に移行するのはいつになることやら。。
0624デフォルトの名無しさん
2008/02/22(金) 11:43:56Javaをネイティブ化したいだけならGCJもあるよ
速くなるとは限らないが
Javaが見た感じ重いのはSwingとかライブラリのせいもあるから…
0625デフォルトの名無しさん
2008/02/22(金) 11:48:02お前らに朗報
http://pc11.2ch.net/tech/
この板の適当なスレに
http://www.xlsoft.com/jp/products/jet/index.html
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
と書き込んだらデブスがデブゲバうpするってよお
0626デフォルトの名無しさん
2008/02/22(金) 11:50:08お前らに朗報
http://pc11.2ch.net/tech/
この板の適当なスレに
http://www.xlsoft.com/jp/products/jet/index.html
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
こう書き込まないとお前らがキーボード打ってる指があさって腐るそうだ
腐って死ぬぞ??
0627デフォルトの名無しさん
2008/02/22(金) 12:37:40Foo[] と ArrayList<Foo> が初心者的には理解しやすくなると思うんだけど
単なる入門書の怠慢だと思う
0628デフォルトの名無しさん
2008/02/22(金) 14:03:270629デフォルトの名無しさん
2008/02/22(金) 15:01:06import java.util.Scanner;
public class tes
{
public static void main(String[] args)
{
char stuname;
Scanner kb = new Scanner(System.in);
stuname = getStuN("Please enter the student name: ", kb);
}
//get studnt name
public static char getStuN(String str, Scanner kb)
{
System.out.print(str);
char sname = kb.nextLine();
System.out.print(sname);
return sname;
}
}
---------
tes.java:15: 互換性のない型
検出値 : java.lang.String
期待値 : char
char sname = kb.nextLine();
^
0630デフォルトの名無しさん
2008/02/22(金) 15:08:50ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Scanner.html
nextLine の戻り値型は String です。
よって sname の型宣言を String にして、それ以降の記述を適切に修正してください。
0631デフォルトの名無しさん
2008/02/22(金) 15:26:12できました! ありがとうございましたm(_ _)m
0632デフォルトの名無しさん
2008/02/22(金) 15:42:51165 名前: 以下、名無しにかわりましてVIPがお送りします。 [sage] 投稿日: 2008/02/22(金) 11:45:46.56 ID:Q0PQrlKw0
お前らに朗報
http://pc11.2ch.net/tech/
この板の適当なスレに
http://www.xlsoft.com/jp/products/jet/index.html
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
と書き込んだらデブスがデブゲバうpするってよお
626 名前:デフォルトの名無しさん[] 投稿日:2008/02/22(金) 11:50:08
170 名前:以下、名無しにかわりましてVIPがお送りします。[sage] 投稿日:2008/02/22(金) 11:47:31.63 ID:Q0PQrlKw0
お前らに朗報
http://pc11.2ch.net/tech/
この板の適当なスレに
http://www.xlsoft.com/jp/products/jet/index.html
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
こう書き込まないとお前らがキーボード打ってる指があさって腐るそうだ
腐って死ぬぞ??
0633デフォルトの名無しさん
2008/02/22(金) 18:03:04JAVAからpostgresのでーたをバックアップする方法を知りたいのですが、
JDBCを利用して、postgreSQLのpg_dumpを操作する方法はあるのでしょうか。
また、pg_dump以外にも、JDBCにてデータのバックアップを出来る方法があれば、
ご教授お願いいたします。
0634デフォルトの名無しさん
2008/02/22(金) 18:19:27DatabaseMetaData#getTablesで全テーブルを取得して全行クエリしてファイルに書き出すとか・・・
それですべて復元できるかわからないけど
Runtime#execでpg_dump呼び出す方が簡単な気がする
0635デフォルトの名無しさん
2008/02/22(金) 18:33:59>DatabaseMetaData#getTablesで全テーブルを取得して全行クエリしてファイルに書き出すとか・・・
それは遅そうだw
>Runtime#execでpg_dump呼び出す方が簡単な気がする
わしもそう思う。
何かの操作が必要だったら、シェルかバッチの中でJavaプログラムで操作したのちに
バックアップを走らせた方が効率が良さそうだが。
0636633
2008/02/22(金) 18:44:15どうもありがとうございます。
早速、試してみます。
0637デフォルトの名無しさん
2008/02/22(金) 19:07:300638デフォルトの名無しさん
2008/02/22(金) 21:32:33環境:Oracle JDBC
PreparedStatementとResultSetを使用し、
SELECTを実行しています。
通常問題ないのですが、バインド変数(?)が11個以上あるSQLを実行した場合、
かつ、レコードのヒット件数が11件以上を超えている場合、
11件目のデータ取得時に「配列の範囲」を超えた、という例外が発生します。
バインド変数はsetStringで1から順に設定し、
設定内容についても問題ないです。
※デバッガで確認済み
SQL自身は問題なく、SQLExceptionが発生しているわけでもありません。
何か回避策はあるのでしょうか?
0639デフォルトの名無しさん
2008/02/22(金) 22:03:150640デフォルトの名無しさん
2008/02/22(金) 22:09:44内部変数はInt型が2つ、Boolean型が1つの小さなクラスです。
クラスの2次元配列として2000x2000のインスタンスを生成するコードを書いたら
インスタンスを生成する箇所(以下)で
for(int j=0;j<2000;j++){
for(int i=0;i<2000;i++){
box[i][j] = new Box();
}
}
java.lang.OutOfMemoryError: Java heap space
というエラーが出てしまいました。
メモリの使い方が下手なんだと思うのですが、
よい対処法が思いつきません。
何か手はあるでしょうか?
0641デフォルトの名無しさん
2008/02/22(金) 22:32:58簡単に計算。integer型として。
4byte * 2 * 2000 * 2000 => 32byte * k * k => 32Mbyte
boolean型はどれだけ食うのか分からないが、さらに4-16Mbyte
ということで、先の値を目安にし、ヒープを明示的に確保します。
以下ページから java のページ、-Xmx や -Xms オプションを参照のこと。
ttp://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/tools.html
他の方法もあるとは思いますが、安易な解決法として。
0642デフォルトの名無しさん
2008/02/22(金) 23:23:53ありがとうございます。
そういうやり方もありそうですが、
もう少しコードの書き方について考えてみます。
0643デフォルトの名無しさん
2008/02/22(金) 23:24:12tomcatをインストールする場面ではjdkではなくjreのパスを指定しますよね
その後もtomcatの設定でjdkの場所を教えたつもりは無いのですが
jspをちゃんとコンパイルしてくれてるみたいです。
tomcatはどうやってjdkを認識してるんでしょうか?
0644デフォルトの名無しさん
2008/02/23(土) 00:47:22JSPのコンパイル用にIBMのJDK積むようになった。
昔はJDKの指定が必須だった。4までだったっけ?
0646デフォルトの名無しさん
2008/02/23(土) 02:17:56Int型というのは存在しない
Booleanの代わりにbooleanを使ったらどうか?
0647デフォルトの名無しさん
2008/02/23(土) 03:40:02試してみた
Sun JRE 1.6.0_04
Box[2000][2000] の場合 107MB
int[2000][2000][2] + boolean[2000][2000] の場合 110 MB
0648デフォルトの名無しさん
2008/02/23(土) 03:59:500649デフォルトの名無しさん
2008/02/23(土) 04:06:06意味が分からん
どういう状況を想定しているのか擬似コードでもいいからシンプルな例で示せ
0650デフォルトの名無しさん
2008/02/23(土) 04:06:21まあなんですか、[2000][2000][2] ではなく、[2][2000][2000] をお勧めします。
ついでに用途が合えば boolean[][] ではなく、java.util.BitSet を。
0651デフォルトの名無しさん
2008/02/23(土) 04:10:57コンストラクタはスレッドセーフかって意味なら答えは一般的にはノー
0652648
2008/02/23(土) 04:16:48コンストラクタ
java.lang.AbstractStringBuilder.AbstractStringBuilder(int capacity)内の
value = new char[capacity];
↑のところでブロックしてたので、非同期でnewは呼べないのかなと思ったんですが
ひょっとするとcapacityが大きいときだけ同期呼び出しだったりします?
■ このスレッドは過去ログ倉庫に格納されています