最近有朋友遇到个问题,tomcat在运行几天后就会报outofmemory,然后就死了,我就稍微总结了下内存泄漏的一些原因,纯属个人理解,欢迎大侠们劈砖:

一.字符串问题

这个也是一个常见的问题,我们相加两个字符串时有几种方法,如new String("test");、"A"+"B",或用StringBuffer等等,至于应该用哪个,这个是应该有讲究的。下面来总结下:1.new基本不可取,除非在需要转码的时候,如new String(str.getBytes("GBK"),"UTF-8"),这种情况下就可以使用;2.str1+str2,如果str1和str2都是常量,则用这种方式相加是最好的,也是占用内存最少的,如果是变量,在1.5之前用StringBuffer进行append操作,1.6之后可以使用StringBuilder进行append操作,因为通常情况下StringBuilder比StringBuffer速度快,因为它不执行同步,大多数情况下能满足我们的需求了。3.不要滥用replace,substring等方法,因为它会产生一个新的字符串

二.其它对象问题

不要没事就new一个对象,而你却不使用,这样造成无辜的浪费,当这个方法被频繁调用时,会产生大量这个对象的实例,jvm回收也需要时间啊。还有就是方法执行时间长的问题,tomcat支持的并发不高,如果方法执行时间长,会造成线程等待(在并发高的情况下)

三.过滤器的问题

设置过滤的内容要注意下,像.do,.action,.jsp可以设置过滤,一些资源问题不需要经过过滤器,否则会浪费资源,严重影响性能

四.session超时时间问题

超时时间不能太长,在用户稍微有点多的情况下就会出现严重的性能问题,这些实例都会一直存在,个人建议1个小时足以

五.tomca连接数设置

合理设置能提高性能,如:<Connector port="8080" maxThreads="500" minSpareThreads="200" maxSpareThreads="100" acceptCount="500" />

maxThreads="500" 表示最多同时处理500个连接
minSpareThreads="200" 初始线程数
maxSpareThreads="200" 最大空闲线程数
acceptCount="500" 当同时连接的人数达到maxThreads时,还可以接收排队的连接,超过这个连接的则直接返回拒绝连接。

如果单纯的使用tomcat跑的话,并发一大,基本就撑不住了,所以可以使用apache或nginx来做负载,个人建议nginx,内存和CPU消耗和apache不是一个级别的,而且在Linux下测试过,并发数远高于apache,nginx是反向代理,配置也简单

浅谈java内存泄漏的更多相关文章

  1. 浅谈C++ 内存泄漏及其检测工具

    浅谈C++ 内存泄漏及其检测工具 http://wenku.baidu.com/link?url=1DGkOOvd_ITZyB8IHAwfhCOx2tfO6id8UfuyQkAMHZU6sasaAXz ...

  2. 浅谈Java内存模型

    Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到.但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着.网上已经有大量的博客,但是人家的终究是人家的,自 ...

  3. 浅谈java内存分配和回收策略

    一.导论 java技术体系中所提到的内存自动化管理归根结底就是内存的分配与回收两个问题,之前已经和大家谈过java回收的相关知识,今天来和大家聊聊java对象的在内存中的分配.通俗的讲,对象的内存分配 ...

  4. 浅谈Java内存及GC

    目录: 1.JAVA虚拟机规范与JAVA虚拟机 2.JVM结构图 3.GC策略与原理 4.垃圾收集算法 5.回收的时机 6.垃圾搜集器 一.JAVA虚拟机规范与JAVA虚拟机 内存,是指程序运行时的数 ...

  5. 浅谈Java内存泄露

    一.引言 先等等吧……累了

  6. 浅谈Java线程安全

    浅谈Java线程安全 - - 2019-04-25    17:37:28 线程安全 Java中的线程安全 按照线程安全的安全程序由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下五类 ...

  7. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  8. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  9. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

随机推荐

  1. 广播接收者 BroadcastReceiver

    1. 分为动态注册和静态注册, 静态注册在清单文件里配置即可.动态创建为代码手动添加. 在锁屏广播中, 使用静态创建消息接受不成功, 原因未知. 动态即可. 代码如下: 2. 创建类, 继承与Broa ...

  2. crop层

    A是要进行剪裁的blob,B是参考,C是由A剪裁出来的输出. 模式1和模式2不同在于offset,模式1中每个dimension可以不同,模式2中用一个值表示了所有dimension的值. axis表 ...

  3. 一、numpy入门

    Array import numpy as np # create from python list list_1 = [1, 2, 3, 4] array_1 = np.array(list_1)# ...

  4. Luogu P1782 旅行商的背包

    题目传送门 卡常背包果然名不虚传 算法主体就是两种背包分开跑,先跑多重背包,再跑奇货 不知道为什么,这题二进制拆分好像要比单调队列优化快一些 然后这题毒瘤的地方就出来了: 如果一件物品的体积\(\ti ...

  5. 使用xcode workspace 多个project协同工作

    一般的某个应用单独新建一个 project 就可以了,然后把所有的程序文件都放在里面,这个可以满足大部分普通的需求,但是有时候,项目有可能要使用其他的项目文件,或者引入其他的静态库文件,这个时候 wo ...

  6. JS中Null与Undefined的区别--2015-06-26

    在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undef ...

  7. 【树形dp】vijos1144小胖守皇宫

    细节很精妙 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...

  8. 蓝牙学习 (8)配对raspberryPi和SensorTag CC2650

    在上一篇中,用raspberryPi能够扫描到Ti SensorTag. 但是没有获得更多的数据,并且发现sensor Tag并没有回复scan request. https://blog.csdn. ...

  9. perl学习之argument

    Arguments are the values you pass to a Perl script. Each value on the command line after the name of ...

  10. 【git】自动换行转换autocrlf

    #####windows git config --global core.autocrlf true #####linux git config --global core.autocrlf inp ...