小编Nie*_*son的帖子

Springboot Maven 项目的垃圾收集永远不会运行

我有一个 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)

java garbage-collection heap-memory spring-boot

5
推荐指数
1
解决办法
1037
查看次数