我有一个 Springboot Maven 项目,它使用 @JmsListener 从队列中读取消息。
如果没有事件进入,堆内存会缓慢增加。当消息到来时,堆内存正在快速增加。但是堆内存永远不会下降(查看下图)。
如果我在接收器方法的末尾添加 System.gc() 垃圾收集器正在按预期工作。但这绝对不是好的做法。
我如何确保 gc 将在适当的时间运行。任何帮助将不胜感激!
堆内存使用
接收方法
@JmsListener(destination = "${someDestination}", containerFactory = "jmsListenerContainerFactory")
public void receiveMessage(Message message){
if (message instanceof BytesMessage) {
try {
List<Trackable> myList;
BytesMessage byteMessage = (BytesMessage) message;
byte[] byteData = new byte[(int) byteMessage.getBodyLength()];
byteMessage.readBytes(byteData);
DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(new StringReader(new String(byteData))));
TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Transformer transformer = factory.newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc.getElementsByTagName(SOME_TAG_NAME).item(0)), new StreamResult(writer));
String outputXmlString = writer.getBuffer().toString(); …Run Code Online (Sandbox Code Playgroud)