jvm内存溢出,求大神指导

做了一个物流的信息对接平台,从下级平台获取车辆的gps信息采用tcp 长连接,200辆车没30秒刷新一次数据,跑了2天jvm 溢出了就大神指导下则么解决,

 public class Serve {
    public static void main(String[] args) throws InterruptedException {
        EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        ServerBootstrap b = new ServerBootstrap(); // (2)
        b.group(bossGroup, workerGroup)
        //设置协议类型
            .channel(NioServerSocketChannel.class)
            //设置处理类
            .childHandler(new ChannelInitializer<SocketChannel>(){
                public void initChannel(SocketChannel ch) throws Exception {
                    ch.pipeline().addLast(new ServeHandler());
                }           
            })
            .option(ChannelOption.SO_BACKLOG, 128)
            .childOption(ChannelOption.SO_KEEPALIVE, true);
            ChannelFuture f = b.bind(40009).sync();
            System.out.println("服务已启动");
            f.channel().closeFuture().sync();
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();

    }
 public class ServeHandler extends ChannelHandlerAdapter{
    HandlerExcutorPool excuPool=new HandlerExcutorPool(100, 500);  //新建线程池
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        try{
            ByteBuf buf=(ByteBuf)msg;
            byte[] data=new byte[buf.readableBytes()];
            buf.readBytes(data);
            if(data[0]==0x5b&&data[data.length-1]==0x5d){
                byte[] content=new byte[data.length-2];
                content=common.subBytes(data, 1, data.length-2);
                byte[] relCon=EscapedUtil.Escaped(content);
                byte[] headAndBody=new byte[relCon.length-2];
                byte[] headArr=new byte[22];
                //抽出数据头和数据体
                for(int i=0;i<relCon.length-2;i++){
                    headAndBody[i]=(byte) (relCon[i]);
                    if(i<22){
                        headArr[i]=(byte) (relCon[i]);
                    }
                }
                //数据转义
                //headAndBody=EscapedUtil.Escaped(headAndBody);
                //crc校验
                int crc=GetCrc16_CCITT.GetCrc16_CCITT(headAndBody);
                //System.out.println(Integer.toHexString(crc));
                int crc1=(relCon[relCon.length-2]&0xff)<<8|(relCon[relCon.length-1]&0xff);
                if((crc&0xffff)==(crc1&0xffff)){
                    //得到数据头的bean
                    Head809 head=HeadService.get809Head(headAndBody);
                    //业务分发
                    if((head.getMsg_id()&0xffff)==MegId.UP_CONNECT_REQ){   //登入请求
                        LoginService login=new LoginService(headAndBody);
                        byte[] rebodyData=login.checkLogin(headAndBody,head.msg_gnsscenterid);  // 检查用户名密码和接入码
                        headArr[8]=0x10;
                        headArr[9]=0x02;
                        byte[] relData=common.getRelData(headArr, rebodyData);
                        //往客户端发送应答信息
                        ctx.channel().writeAndFlush(Unpooled.copiedBuffer(relData));
                    }else if((head.getMsg_id()&0xffff)==MegId.UP_DISCONNECT_REQ){
                        headArr[8]=0x10;
                        headArr[9]=0x04;
                        byte[] relData=common.getRelData(headArr);
                        ctx.channel().writeAndFlush(Unpooled.copiedBuffer(relData)).addListener(ChannelFutureListener.CLOSE);
                    }else if((head.getMsg_id()&0xffff)==MegId.UP_LINKTEST_REQ){
                        headArr[8]=0x10;
                        headArr[9]=0x06;
                        byte[] relData=common.getRelData(headArr);
                        ctx.channel().writeAndFlush(Unpooled.copiedBuffer(relData));
                    }else if((head.getMsg_id()&0xffff)==MegId.UP_EXG_MSG){
                        excuPool.executor(new PositionService(headAndBody));  // 线程池

                    }
                }       
            }
            System.gc();
        }finally {
            ReferenceCountUtil.release(msg);
        }

    }

0

4个回答

 public class HandlerExcutorPool {
    private ExecutorService excutor;
    public HandlerExcutorPool(int maxPoolSize,int queueSize){
        this.excutor=new ThreadPoolExecutor(
                Runtime.getRuntime().availableProcessors(),
                maxPoolSize,
                120L,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(queueSize));   
    }
    public void executor(Runnable task){
        this.excutor.execute(task);
    }
}
 public class PositionService implements Runnable {
    //public static HashMap<String, String> carMap=new HashMap<String, String>();
    private byte[] arr;
    public PositionService(byte[] data){
        this.arr=data;
    }
    private CarPositionInfo positionHandler(byte[] data) throws UnsupportedEncodingException{
        byte[] body=common.subBytes(data, 22, data.length-22);
        byte[] carId=common.subBytes(body, 0, 21);
        byte[] type=common.subBytes(body, 22, 2);
        byte[] lastLength=common.subBytes(body, 24, 4);
        long leng=(((lastLength[0]&0xff)<<24)|((lastLength[1]&0xff)<<16)|((lastLength[2]&0xff)<<8)|(lastLength[3]&0xff))&0x00000000ffffffff;
        byte[] last=common.subBytes(body, 28,36);
        String carNum=new String(carId, "GBK");
        int subType=(((type[0]&0xff)<<8)|(type[1]&0xff))&0x0000ffff;
        CarPositionInfo posiInfo=new CarPositionInfo();
        posiInfo.setCarId(carNum);
        if(subType==MegId.UP_EXG_MSG_REAL_LOCATION){
            boolean entrpt=last[0]==0x00?false:true;
            int year=(((last[3]&0xff)<<8)|(last[4]&0xff))&0x0000ffff;
            short month=(short) (last[2]&0x00ff);
            short day=(short) (last[1]&0x00ff);
            short hour=(short) (last[5]&0x00ff);
            short min=(short) (last[6]&0x00ff);
            short sec=(short) (last[7]&0x00ff);
            String date=""+year+"-"+month+"-"+day+" "+hour+":"+min+":"+sec;
            long lon=(((last[8]&0xff)<<24)|((last[9]&0xff)<<16)|((last[10]&0xff)<<8)|(last[11]&0xff))&0x00000000ffffffff;
            long lat=(((last[12]&0xff)<<24)|((last[13]&0xff)<<16)|((last[14]&0xff)<<8)|(last[15]&0xff))&0x00000000ffffffff;
            String lonStr=""+lon/1000000+"."+getStr(""+lon%1000000,6);
            String latStr=""+lat/1000000+"."+getStr(""+lat%1000000,6);
            int vec=(((last[16]&0xff)<<8)|(last[17]&0xff))&0x0000ffff;
            posiInfo.setEncrypt(entrpt);
            posiInfo.setDate(date);
            posiInfo.setLon(Double.valueOf(lonStr));
            posiInfo.setLat(Double.valueOf(latStr));
            posiInfo.setVec(vec);
        }

        return posiInfo;
    }
    public void sendMsg(byte[] data) {
        try{
            CarPositionInfo carInfo=positionHandler(data);
            HttpRequestUtils req=new HttpRequestUtils();
            Map map=req.getparams();
            SimpleDateFormat simp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            map.put("entity_name", carInfo.carId.trim().replaceAll(" +", ""));
            map.put("latitude", carInfo.lat);
            map.put("longitude", carInfo.lon);
            map.put("speed", carInfo.vec);
            map.put("coord_type", carInfo.encrypt?2:1);
            map.put("loc_time", (simp.parse(carInfo.date).getTime())/1000);
            String json=req.httpPostRequest("http://api.map.baidu.com/trace/v2/track/addpoint", map);
            }catch (Exception e) {
                e.printStackTrace();
        }
    }
    private String getStr(String a,int b){
        String str="";
        if(a.length()>=b)
            return a;
        else{
            for(int i=a.length();i<b;i++){
                str+="0";
            }
            return str+a;
        }

    }
    public void run() {
        try {
            sendMsg(this.arr);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
1

主要跑的ServeHandler中的excuPool.executor(new PositionService(headAndBody)); 这段代码跑了2天jvm内存溢出求解则么玩图片说明

1

是不是创建线程消耗了了太多的native memory资源,; JDk安装目录、bin文件夹下,运行jconsole.exe,看一下线程相关信息。

1
flightbefore
flightbefore 我去瞅瞅
2 年多之前 回复

HandlerExcutorPool excuPool=new HandlerExcutorPool(100, 500); //新建线程池
--- 这里100是不是没必要这么大,有个10就差不多了

1
flightbefore
flightbefore 貌似是线程增加的速度大于线程执行完的速度,这样下去时间超了线程就超了,
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
基于MFC ppi计算器
新手自己写的ppi计算器,开发环境:vs2010 win8.1 ,求指导,求大神指导
Jvm 内存溢出跟踪
JVM的错误之中,java.lang.OutOfMemoryError当属最常见,很多新手对此手无举措,只能各种所搜,配置-Xms -Xmx参数来增加内存,却找不到溢出的原因,其实JDK本身的工具为我们提供了内存溢出的跟踪方法,nn这里我们建立一个简单的Demo演示下;nn一,首先我们要主动的让Jvm内存溢出,这里我们建立个简单的java_project,结构如下:nnnn在test类中,我们制造...
二、JVM(HotSpot)内存泄漏和内存溢出
注:本博文主要是基于JDK1.7会适当加入1.8内容。nn1、Java堆溢出nnnn//-Xms20m -Xms20m -XX:+HeapDumpOnOutOfMemoryErrornpublic class HeapOOM {n static class OOMObject {}nn public static void main(String[] args) {n L...
如何处理jvm内存溢出
1       前言相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识。在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永...
JVM:内存监视手段及各区域内存溢出解决
引言本文仅关注一些常见的虚拟机内存监视手段,以及JVM运行时数据区各个部分内存溢出的发生和对应的解决方案,总体来说属于概括性总结,涉及相对不是很深入,目的是让自己和其它初学者有一个框架性、概念性的了解,当遇到问题时有迹可循、不至于不知所措。一、虚拟机内存监视手段虚拟机常出现的问题包括:内存泄露、内存溢出、频繁GC导致性能下降等,导致这些问题的原因可以通过下面虚拟机内存监视手段来进行分析,具体实施时
JVM内存溢出监控自动化
1:手动生成Java heap dump首先需要搞懂什么是java heap,java heap是分配给实例类和数组对象运行数据区,所有java线程在运行期间共享heap中的数据。Java heap dump相当于java应用在运行的时候在某个时间点上打了个快照(snapshot)。启动一个JAVA项目,环境变量配置了JDK环境njps命令是jdk用来查看java进程的命令,252是当前正在运行的j
jvm 内存溢出的多种原因及优化方法
让我们看一下我们日常在开发过程中接触内存溢出的异常:  rnrnrnException in thread "main" [Full GCjava.lang.OutOfMemoryError: Java heap space n at java.util.Arrays.copyOf(Unknown Source)n at java.util.Arrays.copyOf(Unknown
JVM内存溢出分析
一 内存溢出概述nn    在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时数据区域nn都有发生内存溢出异常(OutOfMemoryError,简称OOM)的可能。nn    内存溢出就是在申请内存的时候,没有足够的内存,这个时候就会抛出内存溢出异常。nn   内存溢出和内存泄漏的区别:nn    内存泄漏是由于使用不当,把一部分内存“丢掉了”,导致这部分内存不可用。nn...
JVM之内存溢出的几种情况以及可以采取的解决方案
开发中遇到过以下三种内存溢出的状况:nn一、 java.lang.OutOfMemoryError: Java heap spacenn二、 java.lang.OutOfMemoryError: PermGen spacenn三、 java.lang.OutOfMemoryError: GC overhead limit exceedednn详述:nn一、Java heap space(堆内存溢...
JVM各种内存溢出是否产生dump
对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:rn永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=10m  -XX:MaxPermSize=10m   -XX:+HeapDumpOnOutOfMemoryErrorrnimport
jvm内存溢出区域和排查方法
目录nn1.堆溢出nn2.栈溢出nn3.方法区和运行时常量池溢出nn4.本机直接内存溢出nn首先我们需要掌握什么是内存溢出和内存泄漏nn内存泄漏:即声明的对象无法被回收,一直存在于内存中,使得占用的内存就像被泄漏消失了一样nn内存溢出:即剩余可用的内存空间过小,无法分配出下一步工作需要的内存。nn内存泄漏过多必然会导致内存溢出nn内存溢出(OOM)会出现在jvm内存的各个区域,程序计数器区是唯一不...
jvm内存溢出
  1.内存泄漏和内存溢出区别?nn内存泄漏:系统分配的内存没有被回收。nn内存溢出:分配的内存空间超过系统内存。nn2. jvm内存泄漏的原因分析?nnjvm由5大块组成:堆,栈,本地方法栈,程序计数器,方法区,这里说一下栈它的主要记录方法的执行和对象的引用。堆则存在真正的引用的对象。方法的执行的结束,可能伴随着java栈内存的自动清除,但是堆内存的对象不一定会随着栈内存的清空而清空,这样的话,...
JVM内存溢出和内存泄露
定义nnn内存溢出out of memory:指程序运行过程中无法申请到足够的内存而导致的一种错误;n内存泄露memory leak:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收始终占用内存;即被分配的对象可达但已无用nnnnn内存溢出:nnn堆内存溢出(outOfMemoryError:java heap space)n方法区内存溢出(outOfMemoryError:permg...
JVM参数调优(内存溢出解决办法)
JVM参数调优(内存溢出解决办法)nnnn设置堆内存大小nnnn错误原因:nnjava.lang.OutOfMemoryError: Java heap space 堆内存溢出nnnn解决办法:nn设置堆内存大小:nnnn -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryErrornn代码案例nnpublic class JvmHeapOutOfMemory {...
【JVM调优】----内存溢出和内存泄漏
项目的开发,涉及到了服务器的运维,先来介绍下JVM相关的知识,也方便后期的使用。今天主要是说一说内存溢出和内存泄漏两件事。    内存溢出    从字面上来说,溢出,什么是溢出?就比如说你把一壶的水倒进一个小杯子里面,小杯子容量小,多出来的水就会溢出。就是你这个小杯子的容量撑不下你的一壶的水。用专业点的语言来说内存溢出,就是你申请内存容量的时候,系统无法给到你足够的内存容量大小,你申请了一个Inte
深入理解JVM学习笔记(三、模拟内存溢出 内存监控方法)
模拟内存溢出一、新建java项目    二、代码如下package com.zjt.test.jvm003;nnpublic class Demo {nn}npackage com.zjt.test.jvm003;nnimport java.util.ArrayList;nnpublic class Main {nn public static void main(String[] args) {...
jvm内存溢出会导致jvm停止工作吗
一直以来以为当java应用程序的内存溢出后,整个jvm就会停止工作,最近做了个小实验发现并不是这样。rnrnjava弱引用rn一段示例代码如下:rn/**rn * 弱引用rn * -Xms5m -Xmx10m 时抛出rn * Exception in thread "Thread-0" java.lang.OutOfMemoryError: GC overhead limit exceededrn *rn */...
JVM内存溢出时 Dump内存分析
1.JVM参数-XX:+HeapDumpOnOutOfMemoryError 设置nn堆内存溢出时,保存内存快照nn参数说明nn(1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。nn(2)-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称nn也就是说当发生OutOfMemoryErro...
Linux下JVM内存溢出后排查分析
记录下常用的方式,后期根据使用继续完善。内存溢出后排查分析:1、通过命令查看对应的进程号  比如:jps    或者   ps -ef | grep servicemix2、输入命令查看gc情况   命令:jstat -gcutil 进程号 刷新的毫秒数 展示的记录数   比如:jstat -gcutil 14050 1000 10  (查看进程号14050,每隔1秒获取下,展示10条记录)3、查...
JVM--02 模拟内存溢出 内存监控方法
摘抄自小涛涛~~~:小涛涛JVM系列博客一 模拟内存溢出:    1 代码如下:   2 IDEA配置JVM参数 配置内容:-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m 其中-XX:+HeapDumpOnOutOfMemoryError指的是在堆溢出时保存快照 其中-Xms20m -Xmx20m是设置JVM最大和最小堆内存都为20m。配置这里是因为...
一个简单但实用的查看JVM内存是否存在内存溢出以及查看GC情况的命令
jstat -gcutil pid 2000:2秒钟打印一次内存占用和GC情况nn可以查看内存占用情况,GC次数及耗时,以及每次GC成果nnnnS0:幸存区1占用率nnS1:幸存区2占用率nnE:Eden区占用率nnO:老年区占用率nnM:元数据区(java8,相当于java7及之前的永久代的概念)使用大小nnccs:压缩后使用率nnYGC:young gc 次数,nnYGCT:young gc耗...
深入理解JVM之内存区域与内存溢出 诊断工具
与你的问题不同,我认为软件工程主要是用来解决问题的。有些博客认为“每个小孩都应该学习编程”,“你认为学数学只是玩玩而已?如果你有看过我的HTML5调试器的话,你会发现我是一个程序员,但我做的工作远不止数学这些”。n 上面两者都同意一个观点,软件工程不只是用计算机语言写的一些只言片语。软件解决的问题诠释了程序员的价值。nn解决问题的最终进展来自科学、强化清晰的头脑和我们一路以来使用的工具。
jvm内存溢出和参数设置
虚拟机栈和本地方法栈溢出:StackOverflowErrorrn-Xoss:设置本地方法栈大小rnjava堆溢出:OutOfMemoryError   java heap spacern-Xmx:设置虚拟机堆参数的最大值rn-Xms:设置虚拟机堆参数的最小值rn运行时常量池溢出:OutOfMemoryError  PermGen spacern-XX:PermSize ,-XX:MaxPermS
jvm内存溢出之jdk命令
jps 查看java应用pidnjps -l 列出应用pid 及jar包完整名称。njps -v 列表应用pid 及jvm参数。nnjmap 获取内存快照njmap -histo:live pid查看内存中对象实例的数量及占据内存大小并排序njmap -dump:format=b,file=文件名 pid导出内存快照,使用mat进行内存溢出分析nnjstat 查看内存使用njstat -gc pi...
jvm堆内存溢出后,其他线程是否可继续工作
    最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。nn    由于题目中给出的OOM,java中OOM又分很多类型;比如:堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、永久带溢出(“java....
JVM之常量池导致的内存溢出异常问题
1.代码运行的时候常量池是方法区的一部分,使用string.itern()是一个Native方法,如果字符串常量池中已经一个等于此String对象的字符串,则返回池中这个字符串的string对象,否则将string对象包含的字符串添加到常量池中,并且由此返回此string对象的引用。nnnn ...
elasticsearch5.X版本运行jvm内存溢出
nversion: '2'nservices:n tz-elasticsearch:n image: elasticsearch:5.6.5n # volumes:n # - ~/volumes/jhipster/tz/elasticsearch/:/usr/share/elasticsearch/data/n ports:n ...
jvm大神链接
https://rednaxelafx.iteye.com/blog
记一次JVM内存溢出造成的tomcat假死排查
今天中午公司老官网挂了,无法访问。领导让我帮同事排查。rn首先NGINX没有问题,其他网站都能访问。rn然后telnet访问tomcat端口。发现端口已经无法访问。但应用仍在服务器上运行。初步判断是tomcat假死造成的。而能造成tomcat假死的多半就是jvm出问题了。rn马上在tomcat启动文件中加入jvm的rmi监控命令和gc日志打印命令。应用重启之后,立马发现了端倪。cpu和内存消耗居高
【Java JVM】如何避免内存泄漏、溢出
总结网络、书本中的相关知识,介绍如何避免内存泄漏、溢出首先介绍一下什么是内存泄漏、溢出(参考我的收藏):n内存泄漏 memory leak:对象可达但不可用;是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。n内存溢出 out of memory:内存大小不够;是指程序在申请内存时,没有足够的内存空间供其使用,出现out
常见jvm内存溢出典型案例
-agentlib:hprof=heap=dump,format=b,file=C:\Users\sxp\Desktop\heapDump1.hprof njvm生成快照文件 n1吞吐量优先收集器在硬件提升的情况下由于大对象在更大堆中的频繁 FULL GC导致的性能下降问题 n解决方案 na)更换64位JDK等增大堆容量的操作,评估FULL GC时间
内存溢出导致JVM进程被kill
查看gc.lognn为什么会有promotion fail呢,是因为垃圾回收时,新生代的对象晋升到老年代,但是老年代放不下了,因此会触发这个报错。可以看出来,上一次GC完新生代已使用空间为345M,老年代已使用空间大约3540M,难怪晋升失败。最后一次GC结束,新生代居然还有4.5G的存活对象。nnpromotion-failed 产生原因:当进行young gc时,由于新生代空间不足,有部分对...
jdk工具jvm内存监控工具jconsole配置与内存溢出分析
一、jconsole配置 jconsole.exe是jdk自带的一款监控jvm的工具,在jdk的bin目录下 打开界面如下:  其中:监控本地jvm可以在下拉选中选择,监控远程jvm需要在tomcat启动文件里添加配置 打开tomcat/bin目录,用记事本打开catalina.sh,在 — Execute The Requested Command ——上方添加 JAVA_OPTS=&quot;$JAVA...
【JVM】Jmap+MAT实战内存溢出
nn导出内存映像文件nn#第一种:内存溢出自动导出n-XX:+HeapDumpOnOutOfMemoryErrorn-XX:HeapDumpPath=./n#第二种:使用jmap命令手动导出n[root@localhost ~]# jmap -dump:format=b,file=heap.hprof 1092nDumping heap to /root/heap.hprof ...nHeap d...
JVM原理及内存溢出经典案列分析.ppt
简单的判断JVM内存溢出的方法
JVM内存溢出的几种情形
java虚拟机规范定义了两种异常与栈空间有关:StackOverflowError和OutOfMemoryErrorn线程计算过程中 栈深度>最大可用栈深度 抛出StackOverflowErrorn如果栈可以动态扩展,如果扩展过程中没有足够内存空间支持会抛出OutOfMemoryErrorn-Xss设置栈大小,栈大小决定了函数调用的可达深度nnnnpublic class Test
分享一次解决线上java应用导致JVM内存溢出(OOM)的问题
某个线上的应用运行几天后,总是出现卡死甚至出现OOM的情况。 n 注:文中图片可能与描述不符,仅作为演示!nnnn通过Linux的top命令查看cpu占比nn首先通过top命令查看,发现某个java程序占用了较高内存:nnnnnnJDK的jps命令确定是哪个java程序nn然后通过jps -l 与上面的PID列(2848)比较,确定是 picasso-java-v1.jar 这个java程序占用c...
jvm内存溢出之Memory Analizer分析内存快照
mat是eclipse的一个插件,可以分析内存快照帮助我们排查内存泄漏的地方。nn首先下载mat, MemoryAnalyzer-1.8.1.20180910-win32.win32.x86_64.zipnn解压后:nnnn双击 MemoryAnalyzer.exe 打开matnnnn写一段出现内存溢出的代码,设置jvm参数 使其出现内存溢出生成一个内存快照文件nnnpackage cn.n1.t...
java 内存溢出 扩大jvm内存
随手小记:今天下午遇到一个问题:java.lang.OutOfMemoryError: Java heap space 内存溢出问题,遇到这个问题一般有两个解决方式第一种:修改代码程序,代码中存在大量未被释放的对象引用,或者gc()机制没有来得及回收内存第二种:扩大jvm内存(主要讲windows上修改方式):1、使用statup.bat启动tomcat的:修改bin目录下的catalina.ba...
1.JVM内存溢出之虚拟机栈和本地方法栈溢出
1.nn理论支持依据有:nnn 当方法被调用的时候,创建栈帧,并压入虚拟机栈,方法执行完毕之后n* 栈阵出栈并且被销毁nn详细过程如下图所示:nnnn虚拟机栈有一个十分明显的特点是隔离性是十分的好的:nn每个线程都有自己独立的虚拟机栈nn其中虚拟机栈的StackOverflowError原理如下所示:nn  若单个线程请求的栈深度大于虚拟机允许的深度,则会抛出StackOverflowError(...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 nlp学习指导 数据库课程设计指导