![]() |
1
2
我认为与记忆档案器的一个会议将对这个问题有很大的启发。这提供了一个很好的概述有多少对象被创建,这是一些启示。 我总是很惊讶有多少字符串被生成。 对于域对象,交叉引用它们也很有意义。如果你突然看到一个派生对象中的对象比源对象中的多3倍,那么那里就发生了一些事情。 Netbeans有一个很好的构建了它。我以前用过JProfiler。我认为如果你在eclipse上花足够长的时间,你可以从PPTP工具得到同样的信息。 |
![]() |
2
9
我有一种感觉,你正在花费时间和精力试图优化一些你不应该费心的事情。 把它翻过来。你花了将近95%的时间做有用的工作。或者换一种方式说,即使您成功地优化了GC以零时间运行,您所能得到的最好的结果是超过5%的改进。 如果应用程序具有受暂停时间影响的硬计时要求,则可以考虑使用低暂停收集器(注意减少暂停时间 增加 总GC开销…)但是对于批处理作业,GC暂停时间应该不相关。 最重要的可能是整个批处理作业的挂钟时间。而且(大约)95%的时间花在做特定于应用程序的事情上,你很可能会从你的评测/目标优化工作中得到更多的回报。例如,您是否查看了成批发送到数据库的更新?
这可能表明,在准备将内容发送到数据库时,大部分内存使用都发生在oraclejdbc驱动程序中。关于那件事你几乎没有什么意见。我认为这是不可避免的开销。 |
![]() |
3
3
你试过不同的垃圾收集算法吗?“UseConcMarkSweepGC”或“UseParNewGC”是如何执行的。 不要忘记简单地增加可用空间不是解决方案,因为gc运行需要更长的时间,将大小减小到正常值;) 你确定没有内存泄漏吗?在消费者-生产者模式中——您描述过——很少有数据应该在旧的Gen中,因为这些工作处理得非常快,然后被“扔掉”,或者您的工作队列已经满了? 你应该用内存分析器来观察你的程序。 |
![]() |
4
2
您需要分析您的应用程序,以查看到底发生了什么。我也会先尝试使用 人体工程学 JVM的特性,如推荐的:
请参阅有关 Ergonomics 在 Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning |
![]() |
5
1
在我看来,年轻一代不应该和老一代一样大,这样小垃圾收集就留得快。
是否有许多对象表示相同的值?如果这样做,请使用简单的
使用Sun热点编译器,本机
|
![]() |
6
1
如果这是你的程序,为什么不设置一个较小的内存大小,如256MB? |
![]() |
7
1
我猜在内存限制这么高的情况下,在进行处理之前,您必须将文件完全读入内存。你能考虑使用 java.io.RandomAccessFile 相反呢? |
|
Sheep · Spring聚合器聚合输入组 7 年前 |
![]() |
bernardo · 无需声明额外的TaskScheduler 7 年前 |
![]() |
tero17 · 读取大文件的最佳方式spring boot 7 年前 |