En nuestra aplicación, usamos Spring Integration/Soap Web Service y Spring Boot. Tenemos un flujo en la integración de Spring que recibe un XML de entrada que tiene una etiqueta llamada <content> que contiene los datos del documento que necesitamos cargar. Dado que es Spring Integration, recibimos estos datos XML como objeto de origen. estamos convirtiendo este objeto de origen en String xml. Veo que el uso de la memoria en JVM se dispara hasta 500 MB cuando se produce esta transformación de fuente a cadena, aunque el contenido del xml es de solo 20 MB. También en Visual VM veo un gran uso de memoria por parte de char [].
Incluso probé con marshaller y marshaller inbound gateway pero el mismo problema.
**<int-ws:inbound-gateway id="uploadDocuments" request-channel="uploaddoc" error-channel="errorChannel" header-mapper="xyz" marshaller="abcjaxbmarshaller" unmarshaller="abcjaxbmarshaller"/>**Incluso escribí un filtro simple solo para ver si el problema está relacionado con Spring Integration, pero lo que encontré es que cuando leo el xml de ServletRequest en el objeto String, la memoria se dispara nuevamente a alrededor de 500 MB.
@Component public class UploadDocumentFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String test = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); System.out.println("the input is " + test); } @Override public void destroy() { // TODO Auto-generated method stub } }El xml de solicitud está codificado en Base64. No puedo justificar el aumento de tamaño de un archivo de 20 MB a un uso de memoria de 500 MB. ¿Podría alguien explicarme por qué hay tanto aumento en la memoria y la posible solución a esto?