首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >blazesds占用大量内存

blazesds占用大量内存
EN

Stack Overflow用户
提问于 2013-02-15 19:06:30
回答 1查看 321关注 0票数 0

Flex4用于与BlazeDS 4.6通信。当flex client调用blazeds服务器上的远程调用时,服务器返回一个包含POJO的arrayList。假设每个POJO mem大小是12个字节,我期望arrayList大小是12*个元素。然而,我发现在blazeds的某个地方,它被多次混合。假设我将200000个POJO添加到数组列表中,我预计它的大小是~2MB。但是,我可以通过分析器看到,JVM的大小是原始大小的N倍,同样的N倍的mem也正在传输到flex浏览器应用程序。下面列出了演示该问题的示例代码,其中包含jmap分析器捕获。如果需要,我也很乐意提供flex代码。

代码语言:javascript
复制
    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;

SampleClass类的定义如下

代码语言:javascript
复制
public class SampleClass
{
    long id;
    int age;
    // getters and setters for each variables
}

内存配置文件位于jdk path中的jmap.exe中。在收到来自客户端的请求之前,JVM中的intitail内存大约为50MB。客户端请求之前jmap的输出。

num #instances :类名的字节数

1-63135- 8497488 - constMethodKlass

2%-65671%- 7858440 % [C

3-91344- 5217976 - symbolKlass

总计658429-50097416字节//初始内存( JVM )

处理请求后来自jmap的输出。

num #instances :类名的字节数

1-11402- 20225512 - [B ]

2-200000- 1948809 - SampleClass //预期为~2MB

3-62734- 8451040 - constMethodKlass

在未进行垃圾回收的JVM中,总共消耗了1175132到93938272字节//的内存。

奇怪的是,当我反复尝试从Flex调用相同的方法时,JVM内存并没有相应地增加。这是第一次在JVM中看到成倍的增长。但是,对于每个调用,flex客户端应用程序内存都在不断增加。

我甚至尝试在YourKit分析器上运行相同的代码,并多次尝试调用GC,但都是徒劳的。

有没有人能让我了解一下blazeds里面到底发生了什么。

EN

回答 1

Stack Overflow用户

发布于 2013-02-15 19:23:52

默认的ArrayList容量是10个对象,当你添加新对象后,如果当前容量超过,你的列表将以当前容量的50%增加自身容量。也许这就是喜欢记忆的原因。尝试阅读此文档http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14893337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档