-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-03-14:哪些情况下会导致oom问题? #5
Comments
该释放回收的资源没有释放掉,字节流没有关掉,activity被持有得不到释放,大图加载,等等等等 |
举个栗子 |
@wardenlzr 使用 |
|
@ADrunkenLiBai |
楼上好多在混淆 内存泄漏和内存溢出啊; |
但是过多的内存泄漏容易导致内存溢出出现的频率。 |
那就回答, 过多的泄漏也会导致溢出, 而不是回答什么情况会导致泄漏, 然后围绕着泄漏回答好多; |
第6点,StringBuilder是什么意思?难道我用多了StringBuffer会造成内存溢出吗? |
直接使用String会创建销毁多个实例,对性能有影响,StringBuffer只会一直操作同一个StringBuffer对象,就优化了内存使用。另外new的对象的内存超过了虚拟机的最大内存并且GC不掉就会内存溢出吧 |
个人觉得没毛病,内存溢出跟内存泄漏还是有区别的。过多的内存泄漏会导致内存溢出,但是内存泄漏不一定会导致内存溢出,还是要严谨一点。 |
1、根据java的内存模型会出现内存溢出的内存有堆内存、方法区内存、虚拟机栈内存、native方法区内存; |
OOM 即 out of memory 内存溢出 。 |
线程开多了 |
我记得一个线程要占大约2M的内存大小。所以开多了肯定会有内存问题。 |
我遇到的一般是:线程创建过多和加载较大的资源文件。 确实应该区分:内存溢出和内存泄漏。 |
首先明确一点,内存泄漏和内存溢出是不同的,但是过多的内存泄漏会导致内存溢出。 常见的内存溢出的原因: 内存优化的方法: |
1.内存泄露 |
这位同学,单例模式不会照成内存泄漏,Context引用没有及时释放而已,根本原因不是单例模式。 |
1、过多的内存泄漏 |
线程池使用不合理,例如使用FixedThreadPool和SingleThreadPool时,由于这两个线程池的任务队列是无界的LinkedBlockingQueue,所以无限制的添加新任务,当任务过多时会导致OOM发生,或者使用CachedThreadPool时,最大线程数没有限制,创建过多线程,导致OOM |
内存溢出(oom)说白了就是应用要申请的内存大于手机对该应用的限制。因此所有导致内存增长的操作都是有可能导致内存溢出的。之所以没有看到内存只增不减,是因为JVM的自动垃圾回收机制。所以上面说的导致oom的情况,只是某些特定场景。并不是说加载小图就不会oom,也不是说创建一个线程就不会oom,也不是说内存泄漏就一定会oom...举个例子: 比如:假如你有一个10立方米的水桶,你一次倒入1立方米的水,前10次都不会溢出,但是第11次就要开始往外取1立方水(相当于内存回收)才能继续倒水,不然就会溢出水(oom)。 |
1过多的内存泄漏会导致内存溢出 |
OOM,内存溢出。 从应用的角度来看,当内存超过系统给当前进程允许的最大内存,或者,系统的内存不足,无法分配新的内存时;就会触发OOM。 这也是为啥,OOM上报的堆栈,往往都是无用的,大概率并不能直接用于解决OOM的Crash。 |
No description provided.
The text was updated successfully, but these errors were encountered: