精华内容
下载资源
问答
  • 下面小编就为大家带来一篇完美解决java读取大文件内存溢出的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • java文件上传内存溢出

    2020-12-15 14:28:46
    java -jar -server -Xms2g -Xmx2g java ${JVM_OPTS} -jar jar/diageo-background.jar --spring.profiles.active=prod $SPRING_OPTS > diageobi.log 2>&1 & java $JVM_OPTS -jar -server -Xms2g -...
    java -jar -server -Xms2g -Xmx2g 
    
    java  ${JVM_OPTS}  -jar jar/diageo-background.jar --spring.profiles.active=prod  $SPRING_OPTS > diageobi.log 2>&1 &
    
    java $JVM_OPTS -jar -server -Xms2g -Xmx2g $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &
    

    jar文件

    # War file 
    JAR_FILE="../jar/order-0.1.0-RELEASE.jar"
    

    SPRING_OPTS

    # SPRING_OPTS
    SPRING_OPTS="--spring.profiles.active=prod,swagger,no-liquibase"
    

    Log文件

    # Log config
    SPRING_OPTS="${SPRING_OPTS} --logging.file=logs/${APP_ID}.log"
    
    SPRING_OPTS="${SPRING_OPTS} --eureka.client.service-url.defaultZone=http://admin:GenieRegistry@localhost:30026/eureka/"
     
    SPRING_OPTS="${SPRING_OPTS} --spring.cloud.config.uri=http://admin:GenieRegistry@localhost:30026/config/"
    
    
    java $JVM_OPTS -jar -server -Xms2g -Xmx2g $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &
    
    展开全文
  • 文章目录Java-排查内存泄漏内存溢出和内存泄露内存溢出产生原因:发生场景此错误常见的错误提示:解决方法内存泄露内存溢出和内存泄露的联系 内存溢出和内存泄露 内存溢出:程序所写入数据的空间大于所申请的空间,...

    Java-内存溢出和内存泄露

    Java-内存泄漏


    内存溢出和内存泄露

    内存溢出:程序所写入数据的空间大于所申请的空间,就会出现溢出。
    内存泄漏:程序用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是因为一直被某个或某些实例所持有导致 GC 不能回收,也就是该被释放的对象没有释放。

    内存溢出

    java.lang.OutOfMemoryError,是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError(OOM)。

    产生原因

    1.JVM内存过小。
    2.程序不严密,产生了过多的垃圾。

    发生场景

    1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据。
    2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。
    3.代码中存在死循环或循环产生过多重复的对象实体。
    4.使用的第三方软件中的BUG。
    5.启动参数内存值设定的过小。

    此错误常见的错误提示:

    tomcat:java.lang.OutOfMemoryError: PermGen space
    tomcat:java.lang.OutOfMemoryError: Java heap space
    weblogic:Root cause of ServletException java.lang.OutOfMemoryError
    resin:java.lang.OutOfMemoryError
    java:java.lang.OutOfMemoryError
    

    解决方法

    1.增加JVM的内存大小;
    2.修改tomcat容器的JAVA_OPTS参数;

    找到tomcat在电脑中的安装目录,进入这个目录,然后进入bin目录中,在window环境下找到bin目录中的catalina.bat,在linux环境下找到catalina.sh。
    编辑catalina.bat文件,找到JAVA_OPTS(具体来说是 set “JAVA_OPTS=%JAVA_OPTS%
    %LOGGING_MANAGER%”)这个选项的位置,这个参数是Java启动的时候,需要的启动参数。
    也可以在操作系统的环境变量中对JAVA_OPTS进行设置,因为tomcat在启动的时候,也会读取操作系统中的环境变量的值,进行加载。
    如果是修改了操作系统的环境变量,需要重启机器,再重启tomcat,如果修改的是tomcat配置文件,需要将配置文件保存,然后重启tomcat,设置就能生效了。

    3.优化程序,释放垃圾。

    避免死循环,防止一次载入太多的数据,提高程序健壮型及时释放。因此,从根本上解决Java内存溢出的唯一方法就是修改程序,及时地释放没用的对象,释放内存空间。

    内存泄露

    内存泄露(Memory Leak),是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

    在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点: 1)首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;
    2)其次,这些对象是无用的,即程序以后不会再使用这些对象。
    如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

    内存溢出和内存泄露的联系

    内存泄露会最终会导致内存溢出。
    相同点:
    都会导致应用程序运行出现问题,性能下降或挂起。
    不同点:
    1.内存泄露是导致内存溢出的原因之一,内存泄露积累起来将导致内存溢出;
    2.内存泄露可以通过完善代码来避免,内存溢出可以通过调整配置来减少发生频率,但无法彻底避免。

    展开全文
  • 解决java读取大文件内存溢出问题

    解决java读取大文件内存溢出问题

    参考文章:

    (1)解决java读取大文件内存溢出问题

    (2)https://www.cnblogs.com/echoty/p/7326827.html

    (3)https://www.javazxz.com/thread-3896-1-1.html


    备忘一下。


    展开全文
  • **java内存溢出怎么解决,附几个内存溢出的例子!** 在java虚拟机规范中,处理程序计数器之外,其他内存区域都有发生OutOfMemoryError(内存溢出)异常的可能。

    java中内存溢出怎么解决,附几个内存溢出的例子!
    在java虚拟机规范中,处理程序计数器之外,其他内存区域都有发生OutOfMemoryError(内存溢出)异常的可能。

    一、java堆内存溢出
    java堆用来存储对象实例,只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量之后就会产生内存溢出异常:

    List<Object> list = new ArrayList<>();
                    while (true) {
                        list.add(new Object());
                    }
    结果:Throwing OutOfMemoryError               
    

    在java语言中,可以作为 GC Roots 的对象包括下面几种:
    1、虚拟机栈(栈帧中本地变量表)中引用的对象
    2、方法区中类静态属性引用的对象
    3、方法区中常量引用的对象
    4、本地方法栈中JNI(即一般所说的Native方法)引用的对象

    解决:确认内存中对象存在是否必要,及检查是否有内存泄漏。
    如果有内存泄漏,查看泄漏对象到 GC Roots 引用链,定位泄漏对象。
    如果没有内存泄漏,检查虚拟机对参数(-Xmx和-Xms)是否可以调大,检查代码中是否有哪些对象的生命周期过长,尝试减少程序运行期的内存消耗

    二、虚拟机栈和本地方法栈内存溢出

    HotSpot虚拟机直接把本地方法栈和JAVA虚拟机栈和二为一了。对于HotSpot来说,虽然 -Xoss(设定本地方法栈大小)参数存在,但是无效的。栈大小只由 -Xss参数设定。

    在Java虚拟机规范中描述了两种异常:
    如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverFlowError异常
    如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常

    在代码测试后发现:
    单线程下,栈帧过大,虚拟机容量过小都不会导致OutOfMemoryError,只会导致StackOverflowError(栈会比内存先爆掉),一般多线程才会出现OutOfMemoryError,因为线程本身要占用内存。

    例如:栈(StackOverflowError)
    如果线程请求的栈深度大于虚拟机栈所允许的最大深度,将会抛出StackOverflowError异常:

    private int stackLength = 1;
     
        public void stackLeak(){
            stackLength++;
            stackLeak();
        }
    结果: java.lang.StackOverflowError: stack size 8MB  
    

    方法执行时在虚拟机栈中会创建对应栈帧,不加限制的递归调用很快会撑爆虚拟机栈。

    栈(OutOfMemoryError)
    如果虚拟机在拓展栈时无法申请到足够的空间则抛出OutOfMemoryError异常

    while (true) {
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        dowhile();
                    }
                });
                thread.start();
            }
    private void dowhile() {
            while (true) {
            }
        }
    

    注:上述代码执行有风险,可能会导致系统假死

    解决:
    如果是多线程导致的OutOfMemoryError,在不能减少线程数或更换64位虚拟机的情况,只能通过减少最大堆和减少栈容量来换取更多的线程;(这个调节思路和 Java 堆出现 OOM 正好相反,Java 堆出现 OOM 要调大堆内存的设置值,而栈出现 OOM 反而要调小)

    三、方法区和运行时常量池溢出

    首先介绍String.intern()这个本地方法,它的作用是:如果字符串常量池中已经包含一个此String对象的字符串,则返回代表池中这个字符串的String对象,否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。

    在 JDK1.6 我们可通过-XX: PermSize 和 -XX:MaxPermSize限制方法区大小,从而间接限制其中常量池的容量

    常量池内存溢出:

    //使用List保持着常量池引用,避免Full GC回收常量池行为
            List<String> list = new ArrayList<String>();
            int i = 0;
            while (true) {
                list.add(String.valueOf(i++).intern());
            }
    

    这段代码在JDK1.6时运行会抛出OutOfMemoryError异常,在 JDK1.7时则不会,程序会一直while循环下去。

    方法区内存溢出:思路,动态创建Class对象。大量产生JSP或动态产生JSP文件的应用,JSP第一次运行时会被编译成Class类。

    四、本地直接内存溢出

    DirectMemory容量可通过 -XX:MaxDirectMemorySize指定,如果不指定,则默认与java堆最大值一样,虽然使用DirectByteBuffer分配内存也会抛出内存溢出异常,但它抛出异常时并没有真正向操作系统申请分配内存,而是通过计算得知内存无法分配,于是手动抛出异常,真正申请分配内存的方法是unsafe.allocateMemory()

    private final int_1MB = 1024 * 1024;
    
    Field unsafeField = Unsafe.class.getDeclaredFields()[0];
    		unsafeField.setAccessible(true);
    		Unsafe unsafe = (Unsafe) unsafeField.get(null);
    		while(true){
    			unsafe.allocateMemory(_1MB);
    		}
    结果:java.lang.OutOfMemoryError
    
    展开全文
  • java排查内存溢出

    2019-12-30 19:21:42
    1.1:什么是内存溢出,为什么会内存溢出? 2排查问题: Overview视图 histogram视图(重要) Dominator Tree(重要) 3问题复现: 4解决问题: 5总结: 1背景: 最近公司线上项目出现了java.lang....
  • 首先在这里记录一个问题 在eclipse中同一个项目下即使...内存溢出问题: 错误信息:java.lang.OutOfMemoryError JVM内存过小、程序不严密,产生了过多的垃圾。导致的问题。想要快速解决的方法改不了程序就需要修改t
  • 完美解决java读取excel内存溢出问题,希望可以帮到大家
  • java实战内存溢出

    2018-11-11 17:16:33
    在实际开发过程中,有可能会遇到内存溢出的错误,如java.lang.OutOfMemoryError: Java heap space,也就是堆内存溢出,这个时候就得排查到底是什么导致了内存溢出,一般情况下,有以下两种情况 内存预分配空间不足 ...
  • Java内存溢出

    2017-11-09 18:08:52
    Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。...一、常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出 解释说明:J
  • java内存溢出之永久代内存溢出

    千次阅读 2018-02-03 15:29:25
    在实际开发中,我们经常会遇到oom,即所谓的内存溢出情况,但是不能是所有的内存溢出都一概而论,我们需要搞清楚具体内存的溢出原因和分类然后对症下药。这里和大家一起学习一下内存溢出中的永久代内存溢出。 ...
  • JAVA内存溢出详解.doc

    2009-03-04 21:20:32
    JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
  • 解决java读取大文件内存溢出的问题

    千次阅读 2019-12-20 11:16:57
    1. 传统方式:在内存中读取文件内容 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: ? 1 2 Files.readLines(new File(path), ...
  • Java虚拟机内存溢出

    2017-12-19 17:02:24
    一 生成内存快照 我们要检测是哪里的代码出了问题,就必须要借助一些命令或者...这样在内存溢出的时候,就会生成内存快照。 如果要测试的话,我们可以设置以下参数,将虚拟机内存调小,方便测试: -XX:+HeapDumpOnO
  • Java 解决堆内存溢出

    2021-05-06 17:05:39
    文章目录目录实战-内存溢出实战-堆内存溢出内存溢出演示代码Eclipse Memory Analyzer 分析流程jvisualvm.exe 分析堆内存溢出内存溢出的场景商城项目可能存在堆内存溢出的方法 目录 实战-内存溢出内存溢出 栈...
  • java 文件excel 内存溢出 解决

    千次阅读 2017-05-25 13:27:31
    POI官方推荐解决内存溢出的方式使用CVS格式解析,我们不可能手工将Excel文件转换成CVS格式再上传,这样做太麻烦了,好再POI给出了xlsx转换CVS的例子,基于这个例子我进行了一下改造,即可解决用户模式读取Excel内存...
  • java内存溢出 原因与排查方法 1、 内存溢出的原因是什么? 内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,导致剩余的内存不够用,造成的内存溢出。如果出现这种现象可行代码排查: 一)是否应用...
  • java线上内存溢出问题排查步骤 面试官:说一下内存溢出排查过程和工具?我... 如何使用MAT进行内存泄露分析 Java线上内存溢出问题排查步骤 1、使用top对当前服务器内存有个大致了解,top后 shift+M俺内存占用由大到...
  • 项目中由于用到附件上传,在提交测试时发现文件附件过大导致java虚拟机内存溢出,就在后台添加限制 fileupload.getSize(); if(fileupload.getSize()&amp;amp;gt;1024*1024*10){ result.setCode(StatusCode...
  • 摘要: Java内存溢出详解 一、常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space —-JVM Heap(堆)溢出JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64...
  • java内存溢出和内存泄露 一、为什么要了解内存泄露和内存溢出?   1、内存泄露一般是代码设计存在缺陷导致的,通过了解内存泄露的场景,可以避免不必要的内存溢出和提高自己的代码编写水平;  2、通过了解...
  • 问题:java程序内存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded问题 1)截取log4j相关日志: java.net.SocketException: Socket input is already shutdown at java.net.Socket.shutdownInput...
  • Java内存区域与内存溢出异常 1.概述 对于 Java 的开发者来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个 new 操作去写配对的 delete/ free 代码,这样不容易出现内存泄露和内存溢出的问题,只要...
  • java内存溢出(OutOfMemoryError)————dump文件以及内存分析 文章目录java内存溢出(OutOfMemoryError)————dump文件以及内存分析1.dump内存快照1.1.测试环境(程序启动)1.2.生产环境(程序运行时)2.分析...
  • Java上传数据内存溢出

    2016-01-01 07:12:29
    银行的系统,上传一个文件给其他系统,由于数据量太大,报内存溢出,急求。
  • java内存溢出

    2016-03-12 13:26:03
    转自:http://baike.baidu.com/link?url=ALoEEdS2E1FMFf_IX2htqy-qpE8amT104tdV47kma3S-uzdwUk_jLFV3hvQykUPccLC2kr40dpeAHmO0fsWWWK内存溢出(out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,...
  • 深入理解Java虚拟机-Java内存区域与内存溢出异常

    万次阅读 多人点赞 2020-01-03 21:42:24
    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来。 文章目录概述运行时数据区域程序计数器(线程私有)Java虚拟机栈(线程私有)局部变量表操作数栈动态链接...
  • 关于Java Tomcat 内存溢出排查

    千次阅读 2018-07-17 11:14:20
    网站不知道什么时候,开始内存飙升,从 Tomcat 启动后,初始内存占用4%~5% ...一、定位造成内存溢出可能存在的问题 io流操作文档没关闭流。 往一个静态集合变量里一直压栈。 连接没释放。 Java队列没消耗。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,198
精华内容 43,679
关键字:

java读文件内存溢出

java 订阅