我有一个java类,它将小消息(< 100字节)写入缓冲区。我有三种消息类型,所以我分配了3个缓冲区。
// Cache seprate buffers for each message type
Class MyWriter(){
private ByteBuffer loginBuffer = ByteBuffer.allocate(35);
private ByteBuffer registerBuffer = ByteBuffer.allocate(23);
private ByteBuffer placeOrderBuffer = ByteBuffer.allocate(75);
....
}
然后我在新的写入上重用它们。例如:
private void writeLogin(){
loginBuffer.clear();
loginBuffer.putLong(...)
...
}
private void writeRegister(){
writeBuffer.clear();
writeBuffer.putLong(...)
...
}
我描述了我的应用程序,这个类是花费大部分处理时间的地方。
我最初认为分配缓冲区一次更有效,然后运行.clear()
方法,而不是在每次读取时分配新的缓冲区。但是,虽然这确实更节省内存,但buffer.clear()
方法需要更多的CPU时间,因为它必须找到缓冲区在内存中的位置吗?
**我的问题是:**它实际上是一个更好的设计,即时分配? IE:
private void writeLogin(){
loginBuffer = ByteBuffer.allocate(35)
loginBuffer.putLong(...)
...
}
当然,它会浪费更多内存,但如果加快处理时间,那就太好了。有经验法则,还是有人已经考虑过这个?
我是Java新手,不知道如何测试这样简单的东西。