Polymer Template with OutOfMemoryError on TemplateDataAnalyzer.parseTemplat

I`m very confused about the high memory consumption of my simple Vaadin 14 sample app. I created a Polymer Template to display this achievement box:
http://files.tobsefritz.de/persistent/vaadin-forum/polymer-temlate.png
The template contains three fields (title, experience, skills):

<div id="achievement">
    <div id="title">[[title]
]</div>
    <div id="footer">
        <div id="experience">
            <div id="xp">[[experience]
]</div>
            <div id="skill-points">[[skills]
]</div>
        </div>
        <div id="actions">
            <iron-icon class="action" icon="vaadin:star"></iron-icon>
            <iron-icon class="action" icon="vaadin:comment"></iron-icon>
            <iron-icon class="action" icon="vaadin:pencil"></iron-icon></div>
         </div>
    </div>
</div>`;

Now I added 37 of these lines in a HorizonalLayout View:

AchievementComponent achievementLine = new AchievementComponent();
achievementLine.getModel().setTitle("Invide a friend");
achievementLine.getModel().setExperience("+200 XP");
achievementLine.getModel().setSkills("CHA 7");
add(achievementLine);

Opening a page with this achievement lines drains 385 MB during TemplateDataAnalyzer.parseTemplate. Is this a normal behavior for using 37 HTML templates on a page? The space will be freed after that, but is so high, that my 512MB Heroku pod gets killed immediately.
The fields will be filled with very short texts. All model data was already present in memory. No database is used to load it. The server runs in production mode on Java 8.
You can crash it by yourself by opening:
https://clean-code-journal.herokuapp.com/achievements
Full source code: https://github.com/TobseF/CleanCodeDeveloperJournal/blob/dev/src/main/java/org/cleancode/journal/view/AchievementsView.java

Any idea what I`m doing wrong? Or do I really need so much heap for one page with polymer template? This is the only reason why I booked a root server to deploy my demo. I was naive and thought 512 MB should be enough.

Full Stacktrace:

2019-12-25 09:39:48.075 ERROR 4 --- [tp1368594774-18]
 c.v.flow.router.InternalServerError      : There was an exception while trying to navigate to 'achievements'
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.cleancode.journal.view.AchievementsView': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.cleancode.journal.view.AchievementsView]
: Constructor threw exception; nested exception is java.lang.OutOfMemoryError: Java heap space
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:314) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:295) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]
2019-12-25T09:39:48.078652+00:00 app[web.1]
: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:307) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:117) ~[vaadin-spring-12.1.2.jar!/:na]

at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:158) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:127) ~[flow-server-2.1.2.jar!/:2.1.2]

at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_232-heroku]

at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:126) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChain(AbstractNavigationStateRenderer.java:314) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:195) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.router.Router.handleNavigation(Router.java:223) [flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.router.Router.navigate(Router.java:194) [flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.router.Router.lambda$initializeUI$caa7783a$1(Router.java:90) [flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.communication.rpc.NavigationRpcHandler.handle(NavigationRpcHandler.java:66) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:400) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:381) ~[flow-server-2.1.2.jar!/:2.1.2]

at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_232-heroku]

at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:381) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:316) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1540) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:247) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:95) ~[vaadin-spring-12.1.2.jar!/:na]

at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) ~[jakarta.servlet-api-4.0.3.jar!/:4.0.3]

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:547) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:608) ~[jetty-security-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:161) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:79) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at javax.servlet.http.HttpServlet.service(HttpServlet.java:523) ~[jakarta.servlet-api-4.0.3.jar!/:4.0.3]

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) ~[jakarta.servlet-api-4.0.3.jar!/:4.0.3]

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226) ~[websocket-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590) ~[jetty-security-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) ~[jetty-servlet-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.Server.handle(Server.java:500) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270) ~[jetty-server-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[jetty-io-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) ~[jetty-io-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) ~[jetty-io-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) ~[jetty-util-9.4.24.v20191120.jar!/:9.4.24.v20191120]

at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_232-heroku]

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.cleancode.journal.view.AchievementsView]
: Constructor threw exception; nested exception is java.lang.OutOfMemoryError: Java heap space
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:213) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:310) ~[spring-beans-5.2.2.RELEASE.jar!/:5.2.2.RELEASE]

... 99 common frames omitted
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332) ~[na:1.8.0_232-heroku]

at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) ~[na:1.8.0_232-heroku]

at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:596) ~[na:1.8.0_232-heroku]

at java.lang.StringBuilder.append(StringBuilder.java:190) ~[na:1.8.0_232-heroku]

at org.apache.commons.io.output.StringBuilderWriter.write(StringBuilderWriter.java:143) ~[commons-io-2.5.jar!/:2.5]
2019-12-25T09:39:48.078829+00:00 app[web.1]
: at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2370) ~[commons-io-2.5.jar!/:2.5]

at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2348) ~[commons-io-2.5.jar!/:2.5]

at org.apache.commons.io.IOUtils.copy(IOUtils.java:2325) ~[commons-io-2.5.jar!/:2.5]

at org.apache.commons.io.IOUtils.copy(IOUtils.java:2273) ~[commons-io-2.5.jar!/:2.5]

at org.apache.commons.io.IOUtils.toString(IOUtils.java:1041) ~[commons-io-2.5.jar!/:2.5]

at com.vaadin.flow.server.frontend.FrontendUtils.getStatsContent(FrontendUtils.java:450) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.NpmTemplateParser.getSourcesFromStats(NpmTemplateParser.java:176) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.NpmTemplateParser.getTemplateContent(NpmTemplateParser.java:107) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.TemplateDataAnalyzer.parseTemplate(TemplateDataAnalyzer.java:200) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.TemplateInitializer.lambda$null$23ee5b4f$1(TemplateInitializer.java:86) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.TemplateInitializer$$Lambda$986/1704384918.apply(Unknown Source) ~[na:na]

at com.vaadin.flow.internal.ReflectionCache.lambda$wrapValueProvider$d0062d93$1(ReflectionCache.java:84) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.internal.ReflectionCache$$Lambda$627/1880015697.apply(Unknown Source) ~[na:na]

at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_232-heroku]

at com.vaadin.flow.internal.ReflectionCache.get(ReflectionCache.java:101) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.TemplateInitializer.<init>(TemplateInitializer.java:87) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.PolymerTemplate.<init>(PolymerTemplate.java:88) ~[flow-server-2.1.2.jar!/:2.1.2]

at com.vaadin.flow.component.polymertemplate.PolymerTemplate.<init>(PolymerTemplate.java:103) ~[flow-server-2.1.2.jar!/:2.1.2]

at org.cleancode.journal.component.AchievementComponent.<init>(AchievementComponent.java:11) ~[classes!/:0.0.0-SNAPSHOT]

at org.cleancode.journal.view.AchievementsView.addAchievement(AchievementsView.java:37) ~[classes!/:0.0.0-SNAPSHOT]
2019-12-25T09:39:48.078859+00:00 app[web.1]
: at org.cleancode.journal.view.AchievementsView$$Lambda$983/1492732314.accept(Unknown Source) ~[na:na]

at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_232-heroku]

at org.cleancode.journal.view.AchievementsView.addAchievements(AchievementsView.java:32) ~[classes!/:0.0.0-SNAPSHOT]

at org.cleancode.journal.view.AchievementsView$$Lambda$982/2018400767.accept(Unknown Source) ~[na:na]

at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:1.8.0_232-heroku]

at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_232-heroku]

at java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:1.8.0_232-heroku]

Hi Tobse,

I am also interested in this thread.

I did not explore in great detail or profile my application yet, but I see that my v14.0.15 application regularly runs out of memory on Heroku 512MB.

I was unable to upgrade to 14.1.16, since the memory requirements seem to have increased and I get OutOfMemoryErrors right away. Is anything know about increase memory use…?

Does anyone have tips and tricks for keeping a v14 application within the memory limits that Heroku sets…?

Best, Mark

Hello. Sorry for the late response for the initial question.

For 14.0 and 14.1 there is an issue caused by bad design in the way we parse a file which contains some needed information regarding the frontend bundle (stats.json). This causes a one-time spike in the memory usage and is the cause of the error according to the logs from the first message.

This issue has been fixed in 14.2 and I would kindly ask you to try out the latest prerelease version 14.2.0.alpha4. Note that you need to add the prerelease Maven repository https://maven.vaadin.com/vaadin-prereleases/ to your pom.xml. (both as repository and pluginRepository)

We chose not to backport the fix to 14.0 and 14.1 because we were not entirely sure it would not cause any regressions and wanted to be on the safe side. It might be that we should revisit that decision.

Good to know, that this shouldn’t be the normal behavior. A little bit too late, because I already mentioned this problem in an article in the Java Magazine. But my hint is still true… monitor your Vaadin app and make tests under load, before even thinking for a production.

I tried to upgrade to the 14.2.0.alpha4 but unfortunately then my server crashes during start.
Here you can see my pom.xml:
https://github.com/TobseF/CleanCodeDeveloperJournal/blob/Vaadin14.2_aplha/pom.xml

I’m using Jetty

:zap: Stacktrace:

2020-02-21 12:05:32.993  WARN 1836 --- [  restartedMain]
 org.eclipse.jetty.webapp.WebAppContext   : Failed startup of context o.s.b.w.e.j.JettyEmbeddedWebAppContext@70ff6acf{application,/,[org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory$LoaderHidingResource@21708939, file:///C:/Users/Tobse/IdeaProjects/vaadin%20presentation/clean-code-journal-spring/target/classes/META-INF/resources/, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-server/2.2.0.alpha13/flow-server-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-push/2.2.0.alpha13/flow-push-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-client/2.2.0.alpha13/flow-client-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-data/2.2.0.alpha13/flow-data-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-dnd/2.2.0.alpha13/flow-dnd-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/org/webjars/npm/vaadin__vaadin-mobile-drag-drop/1.0.0/vaadin__vaadin-mobile-drag-drop-1.0.0.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/org/webjars/npm/mobile-drag-drop/2.3.0-rc.1/mobile-drag-drop-2.3.0-rc.1.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-combo-box-flow/3.0.6/vaadin-combo-box-flow-3.0.6.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-date-picker-flow/2.0.6/vaadin-date-picker-flow-2.0.6.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-time-picker-flow/2.0.3/vaadin-time-picker-flow-2.0.3.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-select-flow/2.0.3/vaadin-select-flow-2.0.3.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-grid-flow/4.1.1/vaadin-grid-flow-4.1.1.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-iron-list-flow/2.0.0/vaadin-iron-list-flow-2.0.0.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-text-field-flow/2.1.0/vaadin-text-field-flow-2.1.0.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-context-menu-flow/3.1.2/vaadin-context-menu-flow-3.1.2.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-menu-bar-flow/1.0.2/vaadin-menu-bar-flow-1.0.2.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-grid-pro-flow/2.0.3/vaadin-grid-pro-flow-2.0.3.jar!/META-INF/resources]
,UNAVAILABLE}

java.lang.NullPointerException: null
	at com.vaadin.flow.server.frontend.NodeUpdater.addDependency(NodeUpdater.java:293) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.frontend.NodeUpdater.updateDefaultDependencies(NodeUpdater.java:265) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.frontend.TaskCreatePackageJson.execute(TaskCreatePackageJson.java:48) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.frontend.NodeTasks.execute(NodeTasks.java:432) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.startup.DevModeInitializer.initDevModeHandler(DevModeInitializer.java:284) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.spring.VaadinServletContextInitializer$DevModeServletContextListener.contextInitialized(VaadinServletContextInitializer.java:346) ~[vaadin-spring-12.2.0.alpha3.jar:na]

	at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:930) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:553) ~[jetty-servlet-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:889) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:356) ~[jetty-servlet-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1445) ~[jetty-webapp-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1409) ~[jetty-webapp-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:822) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:275) ~[jetty-servlet-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524) ~[jetty-webapp-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.Server.start(Server.java:407) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:100) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.Server.doStart(Server.java:371) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.springframework.boot.web.embedded.jetty.JettyWebServer.initialize(JettyWebServer.java:108) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.embedded.jetty.JettyWebServer.<init>(JettyWebServer.java:86) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getJettyWebServer(JettyServletWebServerFactory.java:401) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getWebServer(JettyServletWebServerFactory.java:155) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]

	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.cleancode.journal.Application.main(Application.java:14) ~[classes/:na]

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]

	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]

	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.2.2.RELEASE.jar:2.2.2.RELEASE]


2020-02-21 12:05:32.994  INFO 1836 --- [  restartedMain]
 org.eclipse.jetty.server.session         : node0 Stopped scavenging
2020-02-21 12:05:32.996  INFO 1836 --- [  restartedMain]
 o.e.jetty.server.handler.ContextHandler  : Stopped o.s.b.w.e.j.JettyEmbeddedWebAppContext@70ff6acf{application,/,[org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory$LoaderHidingResource@21708939, file:///C:/Users/Tobse/IdeaProjects/vaadin%20presentation/clean-code-journal-spring/target/classes/META-INF/resources/, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-server/2.2.0.alpha13/flow-server-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-push/2.2.0.alpha13/flow-push-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-client/2.2.0.alpha13/flow-client-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-data/2.2.0.alpha13/flow-data-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/flow-dnd/2.2.0.alpha13/flow-dnd-2.2.0.alpha13.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/org/webjars/npm/vaadin__vaadin-mobile-drag-drop/1.0.0/vaadin__vaadin-mobile-drag-drop-1.0.0.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/org/webjars/npm/mobile-drag-drop/2.3.0-rc.1/mobile-drag-drop-2.3.0-rc.1.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-combo-box-flow/3.0.6/vaadin-combo-box-flow-3.0.6.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-date-picker-flow/2.0.6/vaadin-date-picker-flow-2.0.6.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-time-picker-flow/2.0.3/vaadin-time-picker-flow-2.0.3.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-select-flow/2.0.3/vaadin-select-flow-2.0.3.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-grid-flow/4.1.1/vaadin-grid-flow-4.1.1.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-iron-list-flow/2.0.0/vaadin-iron-list-flow-2.0.0.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-text-field-flow/2.1.0/vaadin-text-field-flow-2.1.0.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-context-menu-flow/3.1.2/vaadin-context-menu-flow-3.1.2.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-menu-bar-flow/1.0.2/vaadin-menu-bar-flow-1.0.2.jar!/META-INF/resources, jar:file:/C:/Users/Tobse/.m2/repository/com/vaadin/vaadin-grid-pro-flow/2.0.3/vaadin-grid-pro-flow-2.0.3.jar!/META-INF/resources]
,UNAVAILABLE}
2020-02-21 12:05:32.997  WARN 1836 --- [  restartedMain]
 ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Jetty web server
2020-02-21 12:05:33.002  INFO 1836 --- [  restartedMain]
 ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-02-21 12:05:33.007 ERROR 1836 --- [  restartedMain]
 o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Jetty web server
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]

	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.cleancode.journal.Application.main(Application.java:14) ~[classes/:na]

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]

	at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]

	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.2.2.RELEASE.jar:2.2.2.RELEASE]

Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Jetty web server
	at org.springframework.boot.web.embedded.jetty.JettyWebServer.initialize(JettyWebServer.java:114) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.embedded.jetty.JettyWebServer.<init>(JettyWebServer.java:86) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getJettyWebServer(JettyServletWebServerFactory.java:401) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getWebServer(JettyServletWebServerFactory.java:155) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	... 13 common frames omitted
Caused by: java.lang.NullPointerException: null
	at com.vaadin.flow.server.frontend.NodeUpdater.addDependency(NodeUpdater.java:293) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.frontend.NodeUpdater.updateDefaultDependencies(NodeUpdater.java:265) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.frontend.TaskCreatePackageJson.execute(TaskCreatePackageJson.java:48) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.frontend.NodeTasks.execute(NodeTasks.java:432) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.server.startup.DevModeInitializer.initDevModeHandler(DevModeInitializer.java:284) ~[flow-server-2.2.0.alpha13.jar:2.2.0.alpha13]

	at com.vaadin.flow.spring.VaadinServletContextInitializer$DevModeServletContextListener.contextInitialized(VaadinServletContextInitializer.java:346) ~[vaadin-spring-12.2.0.alpha3.jar:na]

	at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:930) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:553) ~[jetty-servlet-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:889) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:356) ~[jetty-servlet-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1445) ~[jetty-webapp-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1409) ~[jetty-webapp-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:822) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:275) ~[jetty-servlet-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524) ~[jetty-webapp-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.Server.start(Server.java:407) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:100) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.server.Server.doStart(Server.java:371) ~[jetty-server-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) ~[jetty-util-9.4.24.v20191120.jar:9.4.24.v20191120]

	at org.springframework.boot.web.embedded.jetty.JettyWebServer.initialize(JettyWebServer.java:108) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]

	... 18 common frames omitted

Pekka Hyvönen:
Hello. Sorry for the late response for the initial question.

Thank you Pekka.

My first experience is that memory use is indeed less; my application now starts again on Heroku.

I note that with 14.2.0.alpha4, there is no package-lock.json file anymore and - probably in replacement - a new pnpm-lock.yaml appeared.

In how I build my war-file at the moment, something goes wrong wrong (with static content?), because my application suddenly cannot find the Lumo theme anymore. Is there a description of the 14.2.x changes and what should be modified in the build process?

Best, Mark

Is there a description of the 14.2.x changes and what should be modified in the build process?

Hi Mark, for 14.2 the best source of changes is probably the release notes https://github.com/vaadin/flow/releases/tag/2.2.alpha14

We are still making changes to it though, so there is more to come. Thanks for testing it.

I note that with 14.2.0.alpha4, there is no package-lock.json file anymore and - probably in replacement - a new pnpm-lock.yaml appeared.

Yes this is as expected - pnpm is used as package manager instead of npm. It is used automatically out of the box, but it could be beneficial to install it globally to your system (local / CI), but it is not mandatory. It will just save some build time.

In how I build my war-file at the moment, something goes wrong wrong (with static content?), because my application suddenly cannot find the Lumo theme anymore.

This should not happen - things should have just keep working and this is the first time I’ve heard of this kind of issue when going from 14.1 → 14.2. It would be great if you can reproduce the issue somehow and open an issue, or even the full logs could be helpful for when updating version and then running build that results to a broken artifact.

Thanks for your response, Pekka.

I will double check and see what I can provide you with.

I tried to upgrade to the 14.2.0.alpha4 but unfortunately then my server crashes during start. Here you can see my pom.xml: https://github.com/TobseF/CleanCodeDeveloperJournal/blob/Vaadin14.2_aplha/pom.xml

Tobse I can reproduce the issue and it is actually caused by the disabled stats… I created an issue https://github.com/vaadin/flow/issues/7663, will fixit ASAP. In the meanwhile, you can just remove the

  "vaadin": {
    "disableUsageStatistics": true
  },

from your package.json and the project runs for me (Java 13).

Thanks for helping us discover this!

@Pekka. Thanks for the hint with the UsageStatistics. I had to disable it and deleted the package-lock.json to get it working. Visual JVM shows, that with the aplpha the memmory consumption is only the half. But about 80MB per view, seems still very much for the [37 templates]
(http://clean-code.rocks/achievements).

Vaadin 14

Vaadin 14 aplpha


The screenshots show what happen when you open: http://clean-code.rocks/achievements

  • A1: One achievements page (+ 110MB)
  • A2: Two achievements pages (+ 80MB)
  • A3: Three achievements pages (+ 80MB)

[Sources on GitHub]
(https://github.com/TobseF/CleanCodeDeveloperJournal/blob/dev/src/main/java/org/cleancode/journal/view/AchievementsView.java)

I cannot estimate if this improvement is good enough. For Mark and Me, it can help to host a demo app on Heroku. Real worl Apps, with many templates on one page have to show if the devops are willing to provide the servers for it. For a dev it seems to be very hard to forcast a Vaadins app memory consumption.

Thank you for your valuable post, Tobse.

It seems an important design consideration, isn’t it? Whether to create functionality in different Views or to combine different functions in one View. If every View uses a significant amount of extra memory, it would make sense to reduce the # Views.

For a current application, I am building several fairly simple forms. I was planning to give form its own View and Route, but as I interpret your comments now, I should consolidate to one View and ín that view split out / include different forms based on a particular url action.

Is there any place where such design considerations / guidelines are described…?