最近有朋友遇到个问题,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. codevs 3054 高精度练习-文件操作

    时间限制: 1 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题目描述 Description 输入一组数据,将每个数据加1后输出 输入描述 Input Descripti ...

  2. iOS,APP退到后台,获取推送成功的内容并且语音播报内容。

    老铁,我今天忙了一下午就为解决这个问题,网上有一些方法,说了一堆关于这个挂到后台收到推送并且获得推送内容的问题,有很多人都说APP挂到后台一会就被杀死.但实际上可以有办法解决的. WechatIMG3 ...

  3. 【转】Python 访问 HDFS

    1.前言 hdfs , Hadoop Distributed File System.Hadoop的分布式文件系统,安全行和扩展性没得说. 访问HDFS的方式有以下几种: 命令行方式:FS Shell ...

  4. maven项目创建(eclipse配置

    Eclipse相关配置: eclipse 设置默认编码为Utf-8 需要设置的几处地方为: Window --> Preferences --> General --> Conten ...

  5. Ibatis入门基本语法

    1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映 ...

  6. java在线聊天项目 使用SWT快速制作登录窗口,可视化窗口Design 更换窗口默认皮肤(切换Swing自带的几种皮肤如矩形带圆角)

    SWT成功激活后 new一个JDialog 调整到Design视图 默认的视图模式是BorderLayout,无论你怎么拖拽,只能放到东西南北中的位置上 所以,我们把视图模式调整为AbsoluteLa ...

  7. ios之UIProgressView

    UIProgressView和UIActivityIndicator有些类似   但是不同之处在于, UIProgressView能够更加精确的反应进度 UIActivityIndicator则只能表 ...

  8. Django REST framework 的功能

    1. 认证Authentication 方法一:在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 're ...

  9. 学习python的第十天(内置算法:列表数据类型,元祖数据类型,字典数据类型)

    5.8自我总结 1.列表类型内置算法 1.必须掌握 1.按索引取值(正向取值+反向取值),即可存也可以取 #用于取其中一个值 name = ['yang','wen','yi'] ##正方向取wen, ...

  10. I2C驱动框架(四)

    参考:I2C子系统之platform_driver初始化——I2C_adap_s3c_init() 在完成platform_device的添加之后,i2c子系统将进行platform_driver的注 ...