情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

Androidで同期できない原因がメモリの空き容量不足だったとは このエントリーを含むはてなブックマーク

最近Android(X06ht, HTC Desire)で同期が出来ず、かなり困っていたのですが、その原因が分かり、解消できたのでメモ。

問題

同期が出来ないというのは、具体的には次の通りです。

  • Gmailが同期できない
  • Googleカレンダーが同期できない
  • Gmailアプリの同期ボタンを押しても何も起こらない
  • 設定>アカウントと同期から、「すべてを同期」しても同期できない
  • 端末内部のメールを削除したり、カレンダーの内容を削除しても同期できない
  • つまり、全くメールを受信できない
スポンサーサイト
Android | コメント:11 | トラックバック:0 | 編集

JavaのOutOfMemoryErrorについて このエントリーを含むはてなブックマーク

メモリ不足によるJavaのエラーとその対策方法についてメモしておきます。

OutOfMemoryError

java.lang.OutOfMemoryErrorが発生するときの状況について。

私の場合は、Javaを実行してからだんだんと使用メモリが増加し、GCを繰り返しても増加し続け、

java.lang.OutOfMemoryError: Java heap space
というエラーが表示されました。これは、JVMが確保するヒープサイズの最大値を使用メモリが超えたためです。

-Xmxオプションによる対策

手っ取り早い対策として、-Xmxオプションを利用する方法があります。たとえば、JVMのヒープサイズの最大値を1024MBにするためには、JVMの起動時(javaコマンド実行時)に、

-Xmx1024m
というオプションを追加すればOKです。

eclipseを利用している場合は、Debug ConfigurationまたはRun ConfigurationArgumentタブの「VM arguments」に「-Xmx1024m」を追加すればOKです。

おまけ1 manページ

javaコマンドのmanページ中の-Xmxオプションの項を掲載しておきます。

-Xmxn
Specify the maximum size, in bytes, of the memory allocation pool. This value must a multiple of 1024 greater than 2MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is chosen at runtime based on system configuration. For more information, see HotSpot Ergonomics
 Examples:
    -Xmx83886080
    -Xmx81920k
    -Xmx80m

おまけ2 設定が大きすぎると

最大ヒープサイズを大きくしすぎると次のようなエラーが出ました、というメモ。

  • Error occurred during initialization of VM. Could not reserve enough space for object heap.
  • Could not create the Java virtual machine.
  • Error occurred during initialization of VM. Could not reserve enough space for object heap

おまけ3 Javaのヒープメモリ管理の仕組み

ちょっと古いんですが、関連記事です。→ @IT 「第3回 Javaのヒープ・メモリ管理の仕組み(2005/4/2)」

Java並行処理プログラミング
Google App Engine for Java [実践]クラウドシステム構築
Effective Java 第2版

Java | コメント:0 | トラックバック:0 | 編集

ntdll.dllのエラー問題解決か このエントリーを含むはてなブックマーク

ついさっき書いた記事「ページファイルを無効にすると」を行った結果、もともとの問題点であった、メモリ関係のエラーが頻繁に起きていたのが、今のところ一切発生していません。

Windows | コメント:0 | トラックバック:0 | 編集

オペレーティングシステムの勉強 このエントリーを含むはてなブックマーク

今日はオペレーティングシステムについていろいろ勉強しました。

記録として、重要単語一覧を書いてみます。

まぁ、オペレーティングシステムまとめ みたいな感じ。

OSって、奥が深いですね。こうやって今使っているOSにもこういう機能があるっていうことがなんとなく不思議に感じます。

↓ちょっと高いんだよなぁ
Operating System Concepts
OS自作入門

数学・情報科学 | コメント:0 | トラックバック:0 | 編集

C言語のfree関数の内部でエラー このエントリーを含むはてなブックマーク

eclipseでC言語のプログラムをデバッグ実行してみるとfree関数の内部でエラーを起こしているようでした。スタックトレースはこんな感じ。

Thread[1](Suspended: Signal 'SIGABRT' received. Description: Aborted.)
14 _kernel_vsyscall() 0xb7f4a410
13 raise() 0xb7e02085
12 abort() 0xb7e03a01
11 0xb733ab7c
10 0xb7e42a85
9 free(9 0xb7e754f0
...

はて、何でだろう。二重にfreeしてるのか?とも思いましたが、そうではなかったみたいです。

問題のコードはだいたいこんな感じ

char *str = (char *) malloc(sizeof(char) * 4; char *str2 = NULL; strcpy(str, "abc"); str2 = str + 2; free(str2);

なんかだいぶ適当な例ですが、ポイントは、mallocから受け取ったアドレス(str)から ずれたアドレス(str2)でフリー使用としているということです。

フリーで渡すべきポインタ型の変数はmallocで確保したメモリ領域の先頭である必要があるので、そのメモリ領域の途中をfree関数に渡してはいけません。っていうことみたいです。

大したことじゃないんですけど、デバッグって大変ですね。っていうことです。

実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング
Debug Hacks -デバッグを極めるテクニック&ツール
C言語 デバッグ完全解説 (Gihyo Technology)

C言語 | コメント:0 | トラックバック:0 | 編集
 | HOME | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。