这条微博又给我提供了一个能大量优化内存使用的思路,就是数据库为每张表在内部自动生成一个类,然后用它构建一个对象存放每条记录的字段值,不再使用 Object 数组存放了。

@zhh-4096

固执的观念认为 ORM 很耗内存,毕竟一看到要把每条记录用一个对象表示就认为耗内存。这是非常错误的观念,如果数据库内部把记录从硬盘读到内存然后像 ORM 一样把字节反序列化成 ORM 的对象,反而是最省内存的。

为什么这么说?因为每张表的字段通常不是同一种类型,数据库内部把记录的字节反序列化后不能用 int 这样的数组表示所有的字段,只能使用 Object 数组,int 类型的字段放到 Object 数组只能用 Integer 对象表示,所以原本4个字节的 int 变成了16个字节的 Integer 对象,其他 short、char 等基本类型也类似。

如果像 ORM 那样为每个表生成一个类,这个类包含了所有表的字段,并且这些字段都使用 int 这样的基本类型,那么把记录的字节反序列化成这个类的对象时占用的内存自然比 Object 数组小得多。

Reply to this note

Please Login to reply.

Discussion

No replies yet.