使用 TextMessage 接口 (JMS) 的 .clearProperties() 是否会从堆 space 中删除属性?
Does using .clearProperties() of TextMessage interface (JMS) remove the properties from the heap space?
我有以下代码:
@JmsListener(...)
Public void messageListener(TextMessage message){
System.out.println(message.getText());
//Writing string to a file...and then
//clear it from heap space
message.clearProperties();
//Once removed from heap read from file and process string
processString();
}
这是否从堆 space 中删除了 String
。实际上,我从 MQ 中获取的消息可能有 20MB,所以我想将它写入一个文件,然后从我的堆中清除它 space。这行得通吗?请告诉我如何更好地表述问题。
JavaDoc for javax.jms.Message.clearProperties()
状态:
Clears a message's properties.
The message's header fields and body are not cleared.
如果您关心的 String
是使用 javax.jms.Message.getText()
检索到的,那么这意味着 String
是消息的 body 的一部分clearProperties()
甚至没有碰到。
无论如何,唯一释放堆 space 的是垃圾收集器,您无法直接控制它。您能做的最好的事情就是确保您感兴趣的 Object
没有参考文献。但是,在这种情况下,您正在使用 API(即 JMS),其实现尚不清楚,因此即使设置 message = null
之类的操作也可能不足以让 GC 收集它,因为底层实现可能仍然有参考。
使用 javax.jms.Message.clearBody()
似乎更适合您的用例,但即便如此,JMS API 也不能保证底层消息数据可以免费用于垃圾收集。确切的行为将完全取决于您使用的 JMS 实现。
我有以下代码:
@JmsListener(...)
Public void messageListener(TextMessage message){
System.out.println(message.getText());
//Writing string to a file...and then
//clear it from heap space
message.clearProperties();
//Once removed from heap read from file and process string
processString();
}
这是否从堆 space 中删除了 String
。实际上,我从 MQ 中获取的消息可能有 20MB,所以我想将它写入一个文件,然后从我的堆中清除它 space。这行得通吗?请告诉我如何更好地表述问题。
JavaDoc for javax.jms.Message.clearProperties()
状态:
Clears a message's properties.
The message's header fields and body are not cleared.
如果您关心的 String
是使用 javax.jms.Message.getText()
检索到的,那么这意味着 String
是消息的 body 的一部分clearProperties()
甚至没有碰到。
无论如何,唯一释放堆 space 的是垃圾收集器,您无法直接控制它。您能做的最好的事情就是确保您感兴趣的 Object
没有参考文献。但是,在这种情况下,您正在使用 API(即 JMS),其实现尚不清楚,因此即使设置 message = null
之类的操作也可能不足以让 GC 收集它,因为底层实现可能仍然有参考。
使用 javax.jms.Message.clearBody()
似乎更适合您的用例,但即便如此,JMS API 也不能保证底层消息数据可以免费用于垃圾收集。确切的行为将完全取决于您使用的 JMS 实现。