在Java 中,基本类型的大小是固定的,数据需要3个引用的额外开销,对象需要两个引用的额外开销,在组成高一级的数据结构(对象)时,JVM 会将以8字节为边界单位进行数据对齐操作。有关 Java 对象大小计算的文章可以参考《HOWTO: Determine the size of a Java Object or Class》。
还需要考虑业务执行时可以分配的最大线程数量。Linux 上的线程堆栈最大可以占用8MB内存空间,在JVM 上可以通过启动参数配置线程堆栈的大小,只要不超过操作系统的限制即可。通过系统的总内存空间、缓存所需要的空间、应用运行所需要的临时空间,也就可以计算出线程数的限制。
网卡也是系统的限制之一,计算带宽可以通过以下公式:
(请求或者回应平均大小 * 请求数) / 86400s / 8bit
请求或者回应的平均大小可以在实际环境中采集得到,也可以通过业务的数据情况计算得到上限和平均值。