2012-07-09 193 views
1

我的程序中有大约1500x500像素的栅格。每个像素都用浮点表示。我相信这意味着1500x500x4(字节)= 300万字节或3mb。他们可以比这更大。 Java垃圾收集器对待大对象的方式与小对象不同吗?他们是否会自动跳入上一代?Java垃圾收集和大对象

+3

我不;吨认为有这样的歧视。如果不存在对象的引用,则对象不论大小都可以使用GC。 – kosa 2012-07-09 15:15:43

+1

为什么你关心gc是否以不同的方式对待大对象? – jtahlborn 2012-07-09 15:17:37

+0

除此之外,除非特别在内存模型中定义了这样的内容,否则它是特定于实现的。 – 2012-07-09 15:18:29

回答

4

较大的物体可以直接放置到终身空间中。单个物体的大小是重要的,例如, float[1500][1500]是每个1500 * 4(加上开销)的1500个对象。

http://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/

这意味着JRockit的不到位的大物体进入终身教职的空间,但并没有说明什么热点。


这表明大对象必须比年轻一代的空间大,才能直接进入终身空间。

https://blogs.oracle.com/jonthecollector/entry/size_matters

+0

不适合TLAB的对象将进入终身制,但您只需调整年轻的gen以适应足够大的阵列并且没关系。 – bestsss 2012-07-09 15:30:18

+0

不幸的是,调整年轻的gen是一个全球性的环境,并会影响所有的线程,所以谁知道净效应是否会出现正面。 – 2012-07-09 16:33:28

+0

@MarkoTopolnik,除非应用程序使用对象池,否则较大的年轻人对我来说似乎是一场胜利。我倾向于将服务器配置为年轻一代的1/3。 – bestsss 2012-07-09 16:37:40