这条微博又给我提供了一个能大量优化内存使用的思路,就是数据库为每张表在内部自动生成一个类,然后用它构建一个对象存放每条记录的字段值,不再使用 Object 数组存放了。
@zhh-4096
固执的观念认为 ORM 很耗内存,毕竟一看到要把每条记录用一个对象表示就认为耗内存。这是非常错误的观念,如果数据库内部把记录从硬盘读到内存然后像 ORM 一样把字节反序列化成 ORM 的对象,反而是最省内存的。
为什么这么说?因为每张表的字段通常不是同一种类型,数据库内部把记录的字节反序列化后不能用 int 这样的数组表示所有的字段,只能使用 Object 数组,int 类型的字段放到 Object 数组只能用 Integer 对象表示,所以原本4个字节的 int 变成了16个字节的 Integer 对象,其他 short、char 等基本类型也类似。
如果像 ORM 那样为每个表生成一个类,这个类包含了所有表的字段,并且这些字段都使用 int 这样的基本类型,那么把记录的字节反序列化成这个类的对象时占用的内存自然比 Object 数组小得多。
