有人对jfreechart比较熟悉吗,帮帮忙

TDwebber 2008-10-06 06:53:01
我最近想用jfreechart批量生成一批走势图,有几千个吧。
总是报out of memory的错误,tomcat的内存加大也没用,请问能有什么地方可以优化的吗?

我已经禁掉了tooltips和urls。
...全文
270 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
ftzzh004 2008-10-09
  • 打赏
  • 举报
回复
我记错了不是Y轴,是x轴上有重复值有可能导致这个问题。
freefree 2008-10-08
  • 打赏
  • 举报
回复
sleep(2000)没什么用,只是生成之后停一下,生成的太快容易瞬时内存增大很多。

这个说明你的内存释放有问题,
建议楼主单步调试一下你的程序,看程序运行到哪步,内存会升高
你用是什么方式做的数据库查询?你的这种方式我没见过。
TDwebber 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 freeflyfree 的回复:]
Thread.sleep(2000); 这个有用吗?

getPropertyDataset这个方法检查一下,
并且在循环中,每次生成图片以后,都DefaultCategoryDataset = null
[/Quote]

sleep(2000)没什么用,只是生成之后停一下,生成的太快容易瞬时内存增大很多。
我已经在用完dataset之后设置为null了。
下面是getPropertyDataset方法的代码:
public DefaultCategoryDataset getPropertyDataset(Integer propertyId) {
Calendar now = Calendar.getInstance();
Date endDate = now.getTime();
now.set(Calendar.MONTH, now.get(Calendar.MONTH) - 12);
Date startDate = now.getTime();
DetachedCriteria dc = DetachedCriteria
.forClass(PropertyAveragePrice.class);
dc.createAlias("properties", "prop");
dc.add(Restrictions.eq("prop.propertyId", propertyId));
dc.add(Restrictions.ge("statDate", startDate));
dc.add(Restrictions.le("statDate", endDate));
List res = this.getDao().selectObjects(dc);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
if (res != null && res.size() > 0) {
SimpleDateFormat sdf = new SimpleDateFormat("yy/MM");
for (int i = 0; i < res.size(); i++) {
PropertyAveragePrice pap = (PropertyAveragePrice) res.get(i);
dataset.addValue(pap.getPrice(), "", sdf.format(pap
.getStatDate()));
}
}
return dataset;
}
freefree 2008-10-08
  • 打赏
  • 举报
回复
Thread.sleep(2000); 这个有用吗?

getPropertyDataset这个方法检查一下,
并且在循环中,每次生成图片以后,都DefaultCategoryDataset = null
TDwebber 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 freeflyfree 的回复:]
引用 26 楼 TDwebber 的回复:
引用 25 楼 freeflyfree 的回复:
引用 22 楼 TDwebber 的回复:
引用 21 楼 freeflyfree 的回复:
在你循环取数的时候有没有及时的把取出来的数在生成图片以后清理掉?

取出来的数?你是指CategoryDataset?


你把你循环的那部分语句发出来

try {
String hql = "from Properties p where p.status=1";
List <Properties> props = this.getDao().select(hql);
for (Properties prop …
[/Quote]
没有啊,一个循环而已。
freefree 2008-10-08
  • 打赏
  • 举报
回复
我们一直都是用jfreechar开发,但是没有一下子生成几千副图片的,所以没有碰到过你的问题,而且我认为这个不是jfreechar的问题,而是你的程序没有释放内存,按照我上面说的
单步调试一下你的程序,看程序运行到哪步,内存会升高 并且没有回落。先要找到问题才能解决问题。
freefree 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 TDwebber 的回复:]
引用 33 楼 freeflyfree 的回复:
sleep(2000)没什么用,只是生成之后停一下,生成的太快容易瞬时内存增大很多。

这个说明你的内存释放有问题,
建议楼主单步调试一下你的程序,看程序运行到哪步,内存会升高
你用是什么方式做的数据库查询?你的这种方式我没见过。

现在就是为了解决内存释放的问题。
[/Quote]

要解决,就首先要找到那个地方的内存没有释放啊,所以要你单步调试一下啊
TDwebber 2008-10-08
  • 打赏
  • 举报
回复
感觉用jfreechart的人比较少啊,高手呢?
有没有需要特别注意的地方,给个提示啊。
TDwebber 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 freeflyfree 的回复:]
sleep(2000)没什么用,只是生成之后停一下,生成的太快容易瞬时内存增大很多。

这个说明你的内存释放有问题,
建议楼主单步调试一下你的程序,看程序运行到哪步,内存会升高
你用是什么方式做的数据库查询?你的这种方式我没见过。
[/Quote]
现在就是为了解决内存释放的问题。
dujun3245350 2008-10-07
  • 打赏
  • 举报
回复
接分
freefree 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 TDwebber 的回复:]
引用 25 楼 freeflyfree 的回复:
引用 22 楼 TDwebber 的回复:
引用 21 楼 freeflyfree 的回复:
在你循环取数的时候有没有及时的把取出来的数在生成图片以后清理掉?

取出来的数?你是指CategoryDataset?


你把你循环的那部分语句发出来

try {
String hql = "from Properties p where p.status=1";
List <Properties> props = this.getDao().select(hql);
for (Properties prop : props) {
DefaultC…
[/Quote]


你用了多线程?
cuilike 2008-10-07
  • 打赏
  • 举报
回复
内存不够用咯。。。生成数目太多了
freefree 2008-10-07
  • 打赏
  • 举报
回复
一次生成几千个?到底是怎么生成的?是生成几千个png图片还是什么?

如果是生成几千个ppng图片,你每生成完一个图片以后,就把相关的对象关闭。
宋玮-深圳 2008-10-07
  • 打赏
  • 举报
回复
几千个有必要一次都生成么?
zou_wei_forever 2008-10-07
  • 打赏
  • 举报
回复
对jfreechart不了解,只能帮顶了!
baocheng211 2008-10-07
  • 打赏
  • 举报
回复
关注
TDwebber 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 yingchun888 的回复:]
jfreechart生成几k的数据点(线)图应该是没有问题的.
我估计是你的数据有问题(重复的值)...
[/Quote]
重复的值怎么讲?CategoryData里面的值?
yingchun888 2008-10-07
  • 打赏
  • 举报
回复
jfreechart生成几k的数据点(线)图应该是没有问题的.
我估计是你的数据有问题(重复的值)...
TDwebber 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 freeflyfree 的回复:]
引用 22 楼 TDwebber 的回复:
引用 21 楼 freeflyfree 的回复:
在你循环取数的时候有没有及时的把取出来的数在生成图片以后清理掉?

取出来的数?你是指CategoryDataset?


你把你循环的那部分语句发出来
[/Quote]
try {
String hql = "from Properties p where p.status=1";
List<Properties> props = this.getDao().select(hql);
for (Properties prop : props) {
DefaultCategoryDataset ds = this.getPropertyDataset(prop.getPropertyId());
this.savePropertyImage(prop, ds);

try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch(Exception e) {
e.printStackTrace();
}

。。。。。。。
freefree 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 TDwebber 的回复:]
引用 21 楼 freeflyfree 的回复:
在你循环取数的时候有没有及时的把取出来的数在生成图片以后清理掉?

取出来的数?你是指CategoryDataset?
[/Quote]

你把你循环的那部分语句发出来
加载更多回复(18)

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧