圆圆网络 手游攻略 新游动态 jvm内存优化,jvm优化经验总结

jvm内存优化,jvm优化经验总结

时间:2024-05-01 23:29:13 来源:头条 浏览:0

OutOfMemoryError: Java堆空间错误以及如何处理

使用Java 程序从数据库查询大量数据时出现异常:

jvm内存优化,jvm优化经验总结

java.lang.OutOfMemoryError: Java 堆空间

当98% 的时间都花在GC 上并且可用堆大小小于2% 时,JVM 会抛出此异常消息。 JVM堆设置是指JVM在运行Java程序时分配和使用的内存空间的设置。

JVM 在启动时自动设置堆大小值。其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。 -Xmn -Xms 可以使用-Xmx 和JVM 提供的其他选项进行设置。

示例:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar

如果您将堆大小设置得太低,您不仅会看到这些异常消息,而且您的程序也可能响应得更慢。 GC 将花费更长的时间,并且您的应用程序的执行时间将更少。

最大堆大小不能超过可用物理内存的80%。一般情况下,-Xms 和-Xmx 选项应设置为相同的值,-Xmn 应设置为-Xmx 值的1/4。

堆大小-Xms -Xmn 设置不得超过物理内存的大小。否则,您将看到消息“初始化VM 时发生错误。无法在对象堆中保留足够的空间。”

经过一晚上的奋斗,我完成了一个用文件替换给定字符串的程序,但是由于整个站点程序中有太多我要替换的HTML文件,所以之后Eclipse总是报java.lang.OutOfMemoryError:目录结束Java 堆空间异常并崩溃。

我在每次循环后都添加了Thread.sleep(1000),以为可能是因为操作频繁,没来得及回收,但发现还是卡在那个目录里,于是我添加了1000改为5000。我觉得不是不能及时回收那么简单,但也许Sun的JVM只是还没有针对这种情况发布。

然后我将-Xmx256M 添加到启动参数中,这次成功了。

想想看,我并没有真正理解垃圾回收背后的原理,所以我在网上查了一下,发现了一些不错的文章。

http://java.ccidnet.com/art/3539/20060314/476073_1.html

http://www.pconline.com.cn/pcedu/empolder/gj/java/0509/701281.html

: Java堆管理-垃圾收集有一些非常好的观点,可以作为编写程序时的指南。

(1) 不要假设垃圾回收何时发生。一切都是未知数。例如,方法内的临时对象在方法调用完成后不再可用,此时可以释放其内存。

(2)Java有几个处理垃圾回收的类,还有一个强制垃圾回收的System.gc()方法,但这也是一个不可靠的方法。 Java并不保证每次调用这个方法时都会启动垃圾收集,它只是向JVM发出这样的请求,并不清楚垃圾收集是否真的会发生。

(3)选择适合自己的垃圾收集器。一般来说,如果您的系统没有特殊且苛刻的性能要求,则可以使用JVM 的默认选项。否则,您可以考虑使用有针对性的垃圾收集器。例如,增量收集器适合实时性要求较高的系统。如果您的系统配置较高并且有很多空闲资源,您可以考虑使用并行标记/清除收集器。

(4) 一个关键且难理解的问题是内存泄漏。良好的编程习惯和严格的编程态度永远是最重要的。不要让小错误在你的记忆中留下大漏洞。

(5)尽快释放无用对象的引用。

当大多数程序员使用临时变量时,意味着引用变量在退出活动作用域后自动设置为null,垃圾收集器收集该对象。您还应该注意引用的对象是否正在被监视。也就是说,删除侦听器,然后为其分配空值。

也就是说,最好自己控制频繁申请和释放内存的行为,但是由于System.gc()方法可能不适用,所以需要使用finalize或者你自己的finalization方法来强制执行。

雄猫

遇到TOMCAT错误:java.lang.OutOfMemoryError: Java堆空间,查了资料找到解决办法。

当Java内存不足时,会出现以下错误:

线程“main”中的异常java.lang.OutOfMemoryError: Java 堆空间

Java 堆大小可以增加为:

java -Xms -Xmx

默认值为:

java -Xms32m -Xmx128m

使用win时

/tomcat/bin/catalina.bat 和以下命令:

设置JAVA_OPTS=-Xms32m -Xmx256m

如果您使用的是UNIX/Linux

/tomcat/bin/catalina.sh 和以下命令:

JAVA_OPTS=\'-Xms32m -Xmx256m\'

原因:

使用Java 程序从数据库查询大量数据时出现异常:

java.lang.OutOfMemoryError: Java 堆空间

当98% 的时间都花在GC 上并且可用堆大小小于2% 时,JVM 会抛出此异常消息。

JVM堆设置是指JVM在运行Java程序时可以分配和使用的内存空间。 JVM 在启动时自动设置堆大小值。其初始空间(例如-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。 -Xmn -Xms 可以使用-Xmx 和JVM 提供的其他选项进行设置。

解决了:

将其添加到tomcat_home/bin 下的catalina.bat (win) 或catalina.sh (linux) 可执行代码之前。

设置JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m

==============================================================

Eclipse java.lang.OutOfMemoryError: Java堆空间解决方案

============================================================

Eclipse java.lang.OutOfMemoryError: Java堆空间解决方案

Eclipse 有一个启动参数来设置jvm 大小。 Eclipse本身在运行时也需要jvm,因此eclipse.ini中设置的jvm大小并不是运行特定程序时使用的jvm大小。特定程序运行时的JVM 大小。

那么如何为特定程序设置jvm大小(jvm大小)。

Eclipse中程序默认的jvm配置是-Xms8m -Xmx128m,因此如果您的处理消耗大量内存,则需要手动调整它以避免内存溢出。具体设置方法如下。

选择要运行的类,点击菜单“Run as -Open Run Dialog.”,选择(x)=Argument选项卡,在vm参数框中输入-Xmx512m,保存并运行。

Eclipse 中的java.lang.OutOfMemoryError: Java 堆空间

错误2007-06-12 11:53java.lang.OutOfMemoryError: Java 堆空间错误

将catalina.bat添加到Tomcat

设置JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true

256和512分别是最小和最大内存

在日食中

将-Xms256m -Xmx512m 添加到windows-preferences.-tomcat-jvm.-jvm 文本框。

就是这样!

如何在Eclipse中设置VM - [] - 标签:java.lang.OutOfMemoryError: Java堆区域

右键单击并选择“运行.”,您将看到如下所示的弹出窗口,只需在“vm”输入框中输入适当的内存值即可。

在Eclipse 中,黄线是警告。

private Log log=LogFactory.getLog(AddCateAction.class);//日志中有一条小黄线。

这里的黄线表示我们定义了一个私有变量log但是没有使用这个变量。

v.add(o); //此时Eclipse底部会出现一条小黄线,表示仍然被引用。

这意味着add 方法已被弃用。

OutOfMemoryError 与可疑引用无关。由于定期创建对象,Java 内存可能会不足。

使用参数指定Java 虚拟机的内存。

java -Xms256m -Xmx1024m -XX:MaxPermSize=256M

2、如果启动过程中出现内存溢出问题,会抛出类似如下的异常信息:

java.lang.OutOfMemoryError: Java 堆空间

让我向您展示如何做到这一点:

A、修改Tomcat/bin/catalina.bat,添加以下内容:

设置JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true [-XX:MaxPermSize=128M]

B.在eclipse-windows-preferences.-tomcat-jvm.-jvm 文本框中,添加-Xms256m -Xmx512m。

C.eclipse-preference-java-instal jres-edit,添加参数:-Xms256m -Xmx512m

参考原因:当JVM中98%的时间用于GC并且堆大小小于2%(如果可用)时,会抛出此异常消息。

JVM堆设置是指JVM在运行Java程序时可以分配和使用的内存空间。 JVM 在启动时自动设置堆大小值。其初始空间(例如-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

-Xmn -Xms 可以使用-Xmx 和JVM 提供的其他选项进行设置。最大堆大小不能超过可用物理内存的80%。一般情况下,-Xms 和-Xmx 选项应设置为相同的值,-Xmn 应设置为-Xmx 值的1/4。

堆大小-Xms -Xmn 设置不得超过物理内存的大小。否则,您将看到消息“初始化VM 时发生错误。无法在对象堆中保留足够的空间。”

我的问题的原因:

我使用Spring+Hibernate从数据库加载大量数据,以单例模式在AppContext中使用getBean,并在内存中缓存大量实体Bean.

目前还没有有效的解决方案,但是可以通过增加JVM 的内存大小或改变数据读取的方式(例如,只读取有用的信息)来缓解。

更改数据的读取方式。

例如,EntityBean 具有id、name、age、address 和description 字段。如果你的程序中只使用了这个bean的id和name字段,那么只需要从数据库中读取这两个字段,而不是读取整个bean和相关的bean。

标题:jvm内存优化,jvm优化经验总结
链接:https://yyuanw.com/news/xydt/13344.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭

阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭[多图],阴阳师4月22日更新的内容有哪些?版本更新

2024-05-01
四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址

四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址[多图],2021四川电视台经济频

2024-05-01
湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口

湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口[多图],湖北电视台生活频道

2024-05-01
小森生活金币不够用怎么办?金币没了不够用解决方法

小森生活金币不够用怎么办?金币没了不够用解决方法[多图],小森生活金币突然就不够用的情况很多人都有,金币没

2024-05-01