作为java项目OutOfMemoryError怎么处理,不是javaweb,不是tomcat溢出?
PHPz
PHPz 2017-04-18 09:35:28
0
4
429

不是web项目,纯java项目
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

PHPz
PHPz

学习是最好的投资!

membalas semua(4)
伊谢尔伦

Saya tidak bersetuju dengan pendapat @Pengasas Saya telah melihat ramai orang mula menukar saiz memori timbunan sebaik sahaja OOM berlaku, dan melaraskan ingatan timbunan mungkin tidak bermakna lebih besar adalah lebih baik.

Pertama sekali, sebarkan ilmu:

  • Memori timbunan dibahagikan kepada generasi baharu dan generasi lama Generasi baharu digunakan untuk menyimpan objek yang selalunya perlu GC Setiap contoh objek akan mempunyai kiraan. Jika ia tidak GC untuk tempoh masa tertentu, ia akan dinaikkan pangkat kepada generasi lama untuk disimpan.

  • Generasi lama akan mempunyai ruang yang lebih besar daripada generasi baru.

  • Apabila OOM berlaku, ingatan generasi lama tidak mencukupi (kerana jika ingatan tidak mencukupi pada generasi baru, ia akan diletakkan pada generasi lama untuk simpanan).

Adalah disyorkan untuk menganalisis dan menyelesaikan masalah dengan cara berikut:

1. Semak kod terus untuk melihat jika terdapat sebarang kebocoran memori seperti gelung tak terhingga atau rujukan elemen yang belum dikeluarkan dalam koleksi.

2. Tetapkan parameter JVM -XX:+HeapDumpOutOfMemoryError dan -XX:HeapDumpPath=<你的path>

3. Gunakan alat analisis imej memori (http://www.eclipse.org/mat/) untuk menganalisis sama ada kebocoran memori atau limpahan memori, dan situasi kebocoran memori Seterusnya, ketahui bagaimana objek yang bocor berkaitan dengan GC ROOTS, dan kemudian cari lokasi kod yang bocor.

4. Jika tiada kebocoran memori, gabungkan memori fizikal mesin untuk melihat sama ada anda boleh terus meningkatkan memori timbunan (-Xms dan -Xmx Juga ambil perhatian di sini bahawa lebih besar tetapan memori timbunan). lebih baik. Kerana apabila GC PENUH berlaku pada memori yang besar, ia akan menghantar "stop the world" untuk masa yang lama, yang tidak boleh diterima

Ty80

Penyelesaian mudah ialah melaraskan saiz timbunan
Ubah suai parameter permulaan dalam Eclilpse dan tambahkan -Xms384m -Xmx384m pada argumen VM
atau
Tambah -Xms384m pada catalina.bat tomcat>Walau bagaimanapun, adalah disyorkan untuk menyemak kod sekali lagi

左手右手慢动作

@letcheng bersetuju dengan pandangannya Anda hanyalah projek Java tulen, bukan projek web Berapa banyak objek yang boleh anda cipta dan menyebabkan OOM pada timbunan. Oleh itu, ia sebahagian besarnya disebabkan oleh kod anda.
Di bawah JDK, terdapat alat JConsole.exe terbina dalam Anda boleh memerhatikan berapa banyak objek yang anda miliki pada masa ini, berapa banyak memori timbunan yang ada dan bilakah OOM berlaku?

巴扎黑

Untuk masalah seperti ini, adalah disyorkan untuk menggunakan alat seperti findbug atau sonar untuk menjalankan program untuk melihat di mana terdapat risiko kebocoran memori yang membawa kepada limpahan memori

java.lang.OutOfMemoryError: Ruang timbunan Java ialah keadaan ingatan timbunan muda dan lama Ia akan dibuang apabila ruang ingatan habis Jadi secara amnya, masalah ini disebabkan terutamanya oleh ingatan yang tercipta yang tidak boleh dikitar semula, seperti kelas IO yang paling biasa Jangan lakukan xx.close()

selepas digunakan

Sekadar mengkonfigurasi memori yang besar dalam TOMCAT tidak mencukupi. Anda perlu mencari sumbernya Jika terdapat masalah kebocoran memori, tidak kira berapa besar memori itu, ia akan menjadi sia-sia

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan