java heap space 什么意思_java heap space是什么意思?

java heap space 什么意思_java heap space是什么意思?因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现java.lang.OutOfMemoryError:Javaheapspace这样的错误。javaheapspace的意思为“java堆空间”。在网上一查可能是JAVA的堆栈设置太小的原因。跟据网上的答案大致有这两种解决方法:1、设置环境变量setJAVA_OPTS=-Xms32m-Xmx512m可以根据自己机器的…

大家好,又见面了,我是你们的朋友全栈君。

68a9fc8f6be44dc59a2ab26092cf6378.png

因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误。

java heap space的意思为“java堆空间”。

在网上一查可能是JAVA的堆栈设置太小的原因。

跟据网上的答案大致有这两种解决方法:

1、设置环境变量

set JAVA_OPTS= -Xms32m -Xmx512m

可以根据自己机器的内存进行更改,但本人测试这种方法并没有解决问题。可能是还有哪里需要设置。

2、java -Xms32m -Xmx800m className

就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。(包括包名)

这个解决问题了。而且执行的速度比没有设置的时候快很多。

如果在测试的时候可能会用Eclispe 这时候就需要在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m这个参数就可以了。

java.lang.OutOfMemoryError: Java heap space

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

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

java.lang.OutOfMemoryError: Java heap space

在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.

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

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

如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。

Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during

initialization of VM Could not reserve enough space for object heap”。

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

经过一个晚上的努力终于完成了一个文件替换指定字符串的程序,但是由于我要替换的全站程序html文件太多,所以eclipse下边老是在一个目录结束后报出java.lang.OutOfMemoryError: Java heap space的异常,然后就崩溃了。

我一想肯定是频繁操作造成来不及回收,于是在每个循环之后加上一个Thread.sleep(1000),发现还是到那个目录下就死掉,于是把1000改成5000,还是到那里死掉,我想可能不是来不及回收这么简单,或许sun

的JVM里边刚好对于这种情况不释放也有可能。

接着我又把启动的参数添上一个 -Xmx256M,这回就可以了。

还有:Java堆的管理—垃圾回收提到一下几点,很不错,或许可以作为写程序时候的准则:

(1)不要试图去假定垃圾收集发生的时间,这一切都是未知的。比如,方法中的一个临时对象在方法调用完毕后就变成了无用对象,这个时候它的内存就可以被释放。

(2)Java中提供了一些和垃圾收集打交道的类,而且提供了一种强行执行垃圾收集的方法–调用System.gc(),但这同样是个不确定的方法。Java

中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。

(3)挑选适合自己的垃圾收集器。一般来说,如果系统没有特殊和苛刻的性能要求,可以采用JVM的缺省选项。否则可以考虑使用有针对性的垃圾收集器,比如增量收集器就比较适合实时性要求较高的系统之中。系统具有较高的配置,有比较多的闲置资源,可以考虑使用并行标记/清除收集器。

(4)关键的也是难把握的问题是内存泄漏。良好的编程习惯和严谨的编程态度永远是最重要的,不要让自己的一个小错误导致内存出现大漏洞。

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

大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null,暗示垃圾收集器来收集该对象,还必须注意该引用的对象是否被监听,如果有,则要去掉监听器,然后再赋空值。

就是说,对于频繁申请内存和释放内存的操作,还是自己控制一下比较好,但是System.gc()的方法不一定适用,最好使用finallize强制执行或者写自己的finallize方法。

想要了解更多相关知识,可访问 前端学习网站!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156383.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle删除数据索引还会在吗_索引数据频繁修改

    oracle删除数据索引还会在吗_索引数据频繁修改首先查到表中的现有索引:select*fromuser_indexeswheretable_namein(‘表名’,”);删除索引:dropindex索引名;

    2025年9月14日
    7
  • 软件测试(3) UFT12使用_GUITest

    软件测试(3) UFT12使用_GUITest环境:UFT12,Win10,VS2015&VS2017启动UFT12,为了启动方便修改快捷方式。设置插件,WPF相关的都设置起来。新建项目点击录制按钮(F6),设置启动程序。确定,开始录制。程序启动,显示登录界面。操作:切换IP,点击按钮,登录。点击工具栏按钮,停止录制。点击运行按钮(F5)。

    2022年5月27日
    64
  • java引用变量存放在哪_java成员变量存储在哪个内存区域

    java引用变量存放在哪_java成员变量存储在哪个内存区域我们说常量,静态变量存放在方法区中,方法中的临时变量,存放到Java虚拟栈中。有人问,那全局变量*(对象)存放在哪里.其实全局变量就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)方法区与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。在Class文件中除了类的字段、方法、接…

    2022年8月21日
    46
  • 关于SecureCRT及Vim的使用

    关于SecureCRT及Vim的使用听说大部分的搞网络或者被网络搞的同学,每天都会使用SecureCRT在Linux下进行开发、测试等工作。正所谓“工欲善其事,必先利其器”,一个趁手的开发环境对工作效率的提升是不言而喻的。我在这里简单介绍一下个人在日常使用中积累下来的常用设置及操作,希望对不熟悉的朋友能有一点点参考作用,一家之言,欢迎拍砖。【SecureCRT篇】1、 自动登录服务器如果我们需要经常登录固定某

    2022年6月2日
    39
  • java.lang.NoSuchMethodException: <init>[通俗易懂]

    java.lang.NoSuchMethodException: <init>[通俗易懂]报错信息(捡重要的):java.lang.NoSuchMethodException:com.mmall.pojo.OrderItem.&lt;init&gt;(java.lang.Integer,java.lang.Integer,java.lang.Long,java.lang.Integer,java.lang.String,java.lang.String,java.m…

    2022年6月15日
    41
  • 从MVC框架看MVC架构的设计

    从MVC框架看MVC架构的设计尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点。本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念。MVC回顾作为一种经典到不能再经典的架构模式,MVC的成功有其必然的道理,这个道理不同的人会有不同的解读,笔者最认同的一种观

    2022年4月7日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号