index公式出现溢出如何解决?
解决方法:1:增大进程所占用的总内存。2:减少-Xmx或者-Xss来达到创建更多线程的目的。
怎么避免内存泄露
1.尽量少使用枚举, 因为枚举是常量的一个集合, 你只是使用其中一个, 内部的所有枚举都会加载出来
2.尽量使用静态内部类而不是内部类,因为如果内部类中做耗时操作,因为它会持有外部类的实例对象,导致外部类的实例在生命周期结束的时候没有办法及时释放,这就造成了内存泄漏.
3.尽量使用轻量级的数据结构, 在不使用的时候及记得即使使用clear()方法
4.养成关闭连接和注销监听器的习惯, 在开启任何东西前把关闭都放在finally代码块中
在java 编程中,我们都需要和监听器打交道,通常一个应用当中会用到很多监听器,我们会调用一个控件的诸如addXXXListener()等方法来增加监听器,但往往在释放对象的时候却没有记住去删除这些监听器,从而增加了内存泄漏的机会。
数据库连接(dataSourse.getConnection()),网络连接(socket)和io连接,除非其显式的调用了其close()方法将其连接关闭,否则是不会自动被GC 回收的。对于Resultset 和Statement 对象可以不进行显式回收,但Connection 一定要显式回收,因为Connection 在任何时候都无法自动回收,而Connection一旦回收,Resultset 和Statement 对象就会立即为NULL。但是如果使用连接池,情况就不一样了,除了要显式地关闭连接,还必须显式地关闭Resultset Statement 对象(关闭其中一个,另外一个也会关闭),否则就会造成大量的Statement 对象无法释放,从而引起内存泄漏。这种情况下一般都会在try里面去的连接,在finally里面释放连接。
5.谨慎使用static关键字, 使用static表示这是一个静态量, JVM就会立即加载它, 如果不使用的话有一定的内存浪费
6.谨慎使用单例模式, 单例模式好是好, 但是还是要确保这个单例一定是常使用到的, 而且最好是使用双重检验的英俊的航空模式下的单例模式
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有