java web 内存泄露问题

问题描述

java web 内存泄露问题

在做web项目,需要从数据库一次读取多个数据,然后填充到bean里放入list,这样在循环读取的时候每次都要创建一个bean对象,之前访问量小没什么,现在访问量大了,程序占用越来越高,这应该怎么办?

解决方案

看下有没有对象在持续引用bean对象,特别是静态成员。把jvm的内存调大

解决方案二:

Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。
随着越来越多的服务器程序采用Java技术,例如JSP,Servl......
答案就在这里:Java内存泄露问题

解决方案三:

可以采用分页的方式,不要一次读取很多数据,而是分批次读取,比如一次读取10条,读10次这种。

解决方案四:

LZ您好!
根据您的问题,我理解为,您在前端循环读取的时候,每次都访问了后台。
我建议您做代码优化。比方,在前端访问后台的次数下调。即增加每次数据量的传递。
将bean的创建数量下调,这个方法可以用封装类来实现,每次用户请求的数据,可以封装成一个缓存类来实现。

解决方案五:

1.拿到的bean用完就释放,不要将其长时间存放在list或者map中,这样内存无法回收。
2.减少一次读取数据量

时间: 2024-08-12 10:03:36

java web 内存泄露问题的相关文章

再谈java的内存泄露

这两天看了一本老书<bitter java>,第一次系统地了解了所谓"反模式".就书的内容来说已经过于陈旧,书中提到的magic servlet.复合jsp等等反模式已经是早就熟知的编程禁忌,而如web页面不能有太多元素这样的反模式也因为ajax的出现(异步加载)变的不是那么"反模式"了,其中又讲述了很多ejb的反模式,这些在轻量级框架流行的今天也早已经过时.不过书中有一个章节倒是挺有价值,讲述的是java的内存泄露问题,我认为是我目前读的关于这方面问题

java造成内存泄露原因

一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的.GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请.引用.被引用.赋值等状况进行监控,Java会使用有向图的方法进行管理内存,实时监控对象是否可以达到,如果不可到达,则就将其回收,这样也可以消除引用循环的问题.在J

Tomcat运行Java Web内存溢出总结

如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象.这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出OutOfMemoryError内存溢出错误. SUN JVM的内存管理方式: SUN的JVM是类似人类家族,也就是在一个地方创建对象,在它长期占据空间之前给它多次死亡的机会,SUN JVM会划分为: 1.年轻的一代(Young generation),包括EDEN和2个幸存者空间(出发地和

测试Java Applet内存泄露(非开发环境)

问题描述 我有一个VB.NET开发的桌面程序,里面调用了IE浏览器控件,连接到一个URL,这个URL包含有一个JavaApplet.现在怀疑这个Java小程序有内存泄露的问题,最后导致我的程序运行越来越慢,直到崩溃.但是这个JavaApplet并不是我们开发的,而是国外制造的一个小设备产生的(这个小设备只有一根网线接口,不能接鼠标键盘控制,只知道里面运行了Linux).我如何收集数据,证明这个JavaApplet的对或错呢?我先使用了JProbe和YourKitJavaProfiler,发现它们

(6)java的内存泄露问题

一:什么是内存泄露--->Java的一个最显著的优势是内存管理.你只需要简单的创建对象而不需要负责释放空间,因为Java的垃圾回收器会负责内存的回收.然而,情况并不是这样简单,内存泄露还是经常会在Java应用程序中出现--->内存泄露的定义:对于应用程序来说,当对象已经不再被使用,但是Java的垃圾回收器不能回收它们的时候,就产生了内存泄露.要理解这个定义,我们需要理解对象在内存中的状态.如下图所示,展示了哪些对象是无用对象,哪些是未被引用的对象: ---->上图中包含了未引用对象和引用

JAVA程序内存泄露问题

问题描述 使用quartz每20秒执行一次任务,任务中使用kettle做了一系列的数据抽取转换.程序跑了12个小时后内存从100上升到400.使用jmap导出内存查看后发现内存增长后组要是Unreachableobjects占用在增长.以下是Unreachableobjects的明细图:请问又没有朋友遇到过这样的情况,或者有什么排查的好办法? 解决方案 解决方案二:等待学习--解决方案三:quartz的线程初始化是10个,看下线程是不是一直在增加解决方案四:该回复于2011-03-25 13:2

如何用Java编写一段代码引发内存泄露

Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有,好囧. A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中): 应用程序创建一个长时间运行的线程(或者使用线程池,会更快地发生内存泄露). 线程通过某个类加载器(可以自定义)加载一个类. 该类分配了大块内存(比如new byte[1000000]),在某个静态变量存储一个强引用,然后在ThreadLocal中存储它自身的引用.分配额外的内存new byte[

实例详解Java中ThreadLocal内存泄露_java

案例与分析 问题背景 在 Tomcat 中,下面的代码都在 webapp 内,会导致WebappClassLoader泄漏,无法被回收. public class MyCounter { private int count = 0; public void increment() { count++; } public int getCount() { return count; } } public class MyThreadLocal extends ThreadLocal<MyCount

用java创建一个内存泄露的步骤?

问题: 我之前参加了一个面试, 被问到在java中如何创建一个内存泄露.不用说我当时不知道说啥,如何创建一个,我到现在也没有头绪.可以给我示范一个例子么? 回答: 有一个方式可以创建一个纯Java的内存泄露(运行代码中对象不可达,但仍然驻留在内存里) 1. 应用创建了一个长时间运行的线程(或者使用线程池,这会使内存泄露更快)2.线程从类加载器加载一个类3. 这个类分配一个大内存块(例如new byte[1000000]) ,把它通过强引用指向一个静态成员变量,然后把它自己的引用存储到Thread