Java垃圾回收和大对象 [英] Java Garbage Collection and big objects
问题描述
我的程序中有大约1500x500像素的栅格.每个像素均以浮点数表示.我相信这意味着1500x500x4(bytes)= 3百万个字节或3mb.他们可以比这更大. Java垃圾收集器对大对象的处理方式与对小对象的处理方式不同吗?他们会自动跳入更高的一代吗?
I have rasters in my program of approximately 1500x500 pixels. Each pixel is represented with a float. I believe that means that 1500x500x4(bytes) = 3 million bytes or 3mb. They can be bigger than this. Does the Java Garbage Collector treat big objects differently than smaller ones? Do they skip into a higher generation automatically?
推荐答案
较大的对象可以直接放置到使用权空间中.各个对象的大小很重要,例如float[1500][1500]
是1500个对象,每个对象均为1500 * 4(加上开销).
Larger objects can be placed straight into tenured space. The size of the individual objects is what matters e.g. float[1500][1500]
is 1500 objects which are 1500*4 (plus overhead) each.
http ://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/
这表明JRockit确实将大型对象放到了使用权空间中,但未对HotSpot进行任何说明.
This suggest JRockit does place large objects into tenured space but doesn't say anything about HotSpot.
这表明大型物体必须比年轻一代的空间大,才能直接进入终身空间.
This suggests large objects have to be larger than the young generation space to go directly into tenured space.
https://blogs.oracle.com/jonthecollector/entry/size_matters
这篇关于Java垃圾回收和大对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!