JVM性能优化
内存溢出 内存溢出的原因:程序在申请内存时,没有足够的内存空间。 内存溢出的几种方式 : 1,栈溢出:方法死循环递归(StackOverflowError),不断创立线程(OutOfMemoryError) 2,堆溢出:不断创建对象,分配对象大于最大堆的大小(OutOfMemoryError) 3,直接内存:分配的本地内存大小大于JVM的限制。 4,方法区溢出:在经常动态生产大量Class的应用中,CGLib字节码增强,动态语言,大量JSP文件,大量基于OSGi的应用 内存泄漏 程序在申请内存后,无法释放已申请的内存空间。 内存泄漏的集中原因 : 1,长生命周期的对象持有短生命周期对象的引用:例如将ArrayList设置为静态常量,则容器中的对象在程序结束之前是不能被释放的,从而造成内存泄漏。 2,链接未关闭:如数据库连接池、网络链接和IO链接等,只有链接被关闭后,才会回收对应的对象 3,变量作用域不合理:例如 1.一个变量的定义的作用范围大于其使用范围。2.没有及时把对象设置为null 4,内部类持有外部类:内部类的生命周期长于外部类,程序很容易产生内存泄漏。解决办法,使用软引用或弱引用,通过构造方法传递 5,Hash值得变化:在集合中,如果修改参与计算哈希值字段,会导致无法从集合中单独删除当前对象,造成内存泄漏 内存溢出和内存泄漏的区别 内存溢出:实实在在的内存空间不足导致