Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这会消耗大量内存_Java_Apache Flex_Memory Leaks_Blazeds_Jmap - Fatal编程技术网

Java 这会消耗大量内存

Java 这会消耗大量内存,java,apache-flex,memory-leaks,blazeds,jmap,Java,Apache Flex,Memory Leaks,Blazeds,Jmap,BlazeDS 4用于与Flex4.6通信。当flex客户端调用 远程调用blazeds服务器,服务器返回一个包含POJO的arrayList。 假设每个POJO mem大小为12字节,我希望arrayList的大小为 元素数为12*。然而,我发现在blazeds的某个地方 复合多次。假设我在数组列表中添加200000个POJO, 我预计它的大小约为2MB。但是,我能看穿剖析器, JVM的大小是原来的N倍,而mem的大小是原来的N倍 也被传输到flex浏览器应用程序。下面列出的是一个 演示问题的

BlazeDS 4用于与Flex4.6通信。当flex客户端调用 远程调用blazeds服务器,服务器返回一个包含POJO的arrayList。 假设每个POJO mem大小为12字节,我希望arrayList的大小为 元素数为12*。然而,我发现在blazeds的某个地方 复合多次。假设我在数组列表中添加200000个POJO, 我预计它的大小约为2MB。但是,我能看穿剖析器, JVM的大小是原来的N倍,而mem的大小是原来的N倍 也被传输到flex浏览器应用程序。下面列出的是一个 演示问题的示例代码,以及jmap探查器捕获。 如果需要,我也很乐意提供flex代码

    List list = new ArrayList();
for(i=0;i<200000;i++)
{ SampleClass  sampleClassObj = new SampleClass();
  sampleClassObj.setId(1);
  sampleClassObj.setAge(20);
  list.add(sampleClassObj);
} 
return list;
内存在jmap.exe中进行分析,jmap.exe位于jdk路径中。 在从客户端接收请求之前,JVM中的初始内存约为50MB。 客户端请求之前来自jmap的输出

num#实例#字节类名
163135 8497488 constMethodKlass
2656717858440[C
3913445217976 symbolKlass
.
.
总计658429 50097416//JVM中的初始内存

处理请求后jmap的输出

num#实例#字节类名
1140220225512[B
2 200000 1948809样本类//预计为~2MB
3627348451040 constMethodKlass
.
.
总计1175132 93938272//JVM中未垃圾收集的已消耗内存。

奇怪的是,当我尝试从Flex重复调用同一个方法时,JVM内存并没有相应增加。这只是JVM中第一次出现多倍的增加。但是,每次调用Flex客户端应用程序内存都会不断增加

我甚至尝试在YourKit profiler上运行同样的程序,并多次尝试调用GC,但都没有成功


有人能让我了解blazeds内部的情况吗。

默认情况下,ArrayList的容量为10个对象,在添加新对象后,如果当前容量已过,您的列表会将自身容量增加到当前容量的50%。可能这是内存不足的原因。请尝试阅读此文档。

我尝试执行相同的co在独立应用程序中使用de,但arrayList仍然消耗了约2MB。当列表通过blazeds发送回flex浏览器应用程序时,就会出现问题。
public class SampleClass
{
    long id;
    int age;
    // getters and setters for each variables
}