`OutOfMemoryError`
`OutOfMemoryError` 问题相信很多朋友都遇到过,到底该如何解决?
问题相信很多朋友都遇到过,到底该如何解决?
这个是java编程中常见的异常信息,字面理解是内存溢出,
有几个可能出现该问题的场景
1.内存中加载的数据过于庞大,如一次性取出过多数据放入内存
2.代码中存在死循环,或者循环构建过多重复的对象实体
3.启动参数内存值设定的过小
解决问题的方法有以下几种
1.增加jvm的内存大小,对tomcat等容器在启动的时候对jvm设置内存限度
2.优化程序,主要包括避免死循环,及时释放资源包含无用的过多对象实体、数据库的各种连接,防止一次性载入太多的数据
3,检查List、map等集合对象是否有使用完后,未清除的问题。因为list、map等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收
总之,养成良好的代码习惯会避免很多不必要的错误,还有就是需要自己分析出现问题的代码,能否能及时做好优化,这也是对自己技术提升的不错的途径
直接优化JVM和Tomcat JVM(修改)优化有什么区别?
直接优化JVM和Tomcat JVM(修改)优化有什么区别?“java -Xmx3550m -Xms3550m -Xmn2g -Xss128k”是可以直接命令行设置JVM参数吗?是一次性的而重启后失效吗?设置系统环境变量JAVA_OPTS-Xms256m -Xmx512m就是永久性的没错吧。一下是我的理解,是否有误?:比如我在命令行“java -Xmx3550m -Xms3550m -Xmn2g -Xss128k”或者设置系统环境变量JAVA_OPTS-Xms256m -Xmx512m是不是就是把机器上的JVM优化方案定死了Tomcat JVM(修改)就是当应用起来的时候该应用采取指定的JVM优化方案。
谢邀。
JAVA_OPTS是tomcat,weblogic等中间件自定义的变量,使用其他方式运行java程序并不会使用这个环境变量,比如直接使用java -jar命令 或者使用其他中间件。所以,将JAVA_OPTS设置为环境变量,也只会对tomcat起作用,其他方式启动java进程并不会自动识别这个环境变量并使用,所以这种方式并不能将这台服务器上所有的JVM方案定死,只是给TOMCAT启动JVM的参数设置了默认值。
是否设置这个环境变量,要根据实际情况确定。如果服务器上部署多个tomcat实例,并且资源使用都比较平均,那么这样可以减少一定的配置工作量。如果这些tomcat中运行的应用特点差异很大,必须针对每个应用进行优化,那设置这个环境变量的意义并不大,反而容易出问题。
希望能对题主有所帮助,谢谢。