You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Sergio García <sg...@denodo.com> on 2007/12/05 17:00:42 UTC

OutOfMemoryError: Java heap space

Hi,

I have a memory problem on my wicket app. It's being developed, so there is
no reason for a memory problem. The class that throws this exception has a
intensive use of LoadableDetachableModel.


2007-12-05 16:56:12,032 ERROR [[WicketApplication]]
(StandardWrapperValve.java:253) - Servlet.service() para servlet
WicketApplication lanzó excepción
java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.io.ByteArrayOutputStream.write(Unknown Source)
	at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
	at
java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown
Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at
org.apache.wicket.util.io.IObjectStreamFactory$1.writeObjectOverride(IObjectStreamFactory.java:65)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at org.apache.wicket.util.lang.Objects.objectToByteArray(Objects.java:1085)
	at
org.apache.wicket.protocol.http.pagestore.AbstractPageStore.serializePage(AbstractPageStore.java:198)
	at
org.apache.wicket.protocol.http.pagestore.DiskPageStore.storePage(DiskPageStore.java:708)
	at
org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap.put(SecondLevelCacheSessionStore.java:337)
	at org.apache.wicket.Session.requestDetached(Session.java:1360)
	at org.apache.wicket.RequestCycle.detach(RequestCycle.java:1019)
	at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1266)
	at org.apache.wicket.RequestCycle.request(RequestCycle.java:489)
	at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:343)
	at
org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:139)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:183)
	at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)



Reasons?
-- 
View this message in context: http://www.nabble.com/OutOfMemoryError%3A-Java-heap-space-tf4950580.html#a14174603
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: OutOfMemoryError: Java heap space

Posted by Igor Vaynberg <ig...@gmail.com>.
> The ListView implementation had
> two Label objects that contained two PropertyModels. I didn't know that
> PropertyModel stores the object, i thought that it only  only stores the
> value of the field. This object is very heavy, and the pages was storing two
> heavy objects for each ListItem instance.

the way to do this is to chain propertymodel with another model, eg

imodel m=new loadabledetachablemodel() {...}
add(new label("a", new propertymodel(m, "a")));
add(new label("b", new propertymodel(m, "b")));

-igor



> Thanks for your help!
>
> --
> View this message in context: http://www.nabble.com/OutOfMemoryError%3A-Java-heap-space-tf4950580.html#a14177708
>
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: OutOfMemoryError: Java heap space

Posted by Sergio García <sg...@denodo.com>.


igor.vaynberg wrote:
> 
> erm, if all your OfferListModel do is have something in load() then
> why do you subclass it instead of the LDM directly?
> 
> -igor
> 
> 


First you have to think that i can't touch the service. The abstract
LoadableDetachableModel retrieves a instance of a TO containing eigth List,
each one containing the Offer objects that have a common state. Each
implementation of OfferListModel retieves a different List from the object
that abstract class loads. I don't mind if it loads eight times the entire
object because i have Hibernate second level cache and it only retrieves one
time from DB the objects. 

While we were talking i found the problem. The ListView implementation had
two Label objects that contained two PropertyModels. I didn't know that
PropertyModel stores the object, i thought that it only  only stores the
value of the field. This object is very heavy, and the pages was storing two
heavy objects for each ListItem instance.

Thanks for your help!

-- 
View this message in context: http://www.nabble.com/OutOfMemoryError%3A-Java-heap-space-tf4950580.html#a14177708
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: OutOfMemoryError: Java heap space

Posted by Igor Vaynberg <ig...@gmail.com>.
erm, if all your OfferListModel do is have something in load() then
why do you subclass it instead of the LDM directly?

-igor


On Dec 5, 2007 9:57 AM, Sergio García <sg...@denodo.com> wrote:
>
>
> igor.vaynberg wrote:
> >
> > looks like your page has a reference to some huge object which causes
> > a problem when the page is serialzed - so maybe that loadable
> > detachable model of yours is not very detachable...
> >
> >
> > -igor
> >
>
>
>
> I don't know what i'm doing wrong. I have a abstract detachable model:
>
>
>
>     private abstract class OfferListModel extends LoadableDetachableModel{
>         @Override
>         protected Object load() {
>             String stateAsString = stateDropDown.getModelObjectAsString();
>             Integer year = (Integer) yearDropDown.getModelObject();
>             String userAsString = userDropDown.getModelObjectAsString();
>
>             if (StaticComboLists.OFFER_STATE_ALL.equals(stateAsString)) {
>                 stateAsString = null;
>             }
>
>             if (StaticComboLists.USER_FILTER_ALL.equals(userAsString)) {
>                 userAsString = null;
>             }else {
>                 userAsString = getSignInSession().getUser().getLogin();
>             }
>
>             OffersListParameters parameters =
>                 new OffersListParameters(userAsString, year, stateAsString);
>
>             ClassifiedOffersList offersList =
> offersService.findOffers(parameters);
>
>             return offersList;
>         }
>     }
>
> And eight implementations of it, like this one:
>
>     private class BeingPreparedOfferListModel extends OfferListModel{
>         private static final long serialVersionUID = -1772413039827980131L;
>
>         @Override
>         protected Object load() {
>             ClassifiedOffersList offersList = (ClassifiedOffersList)
> super.load();
>             return offersList.getBeingPrepared();
>         }
>     }
>
>
> Each instance is used like this:
>
>         BeingPreparedOfferListModel beingPreparedOfferListModel =
>             new BeingPreparedOfferListModel();
>
>         beingPreparedContainer =
>             new DisabledIfEmptyMarkupContainer("beingPreparedContainer",
> beingPreparedOfferListModel);
> beingPreparedContainer.add(new
> beingPreparedOfferListView("beingPreparedListView",beingPreparedOfferListModel));
>
> Where the ListView has a reference to a detachable model, and
> DisabledIfEmptyMarkupContainer has a reference also to the DetachableModel:
>
> public class DisabledIfEmptyMarkupContainer extends WebMarkupContainer{
>
>     private static final long serialVersionUID = 8749215642567364820L;
>     private LoadableDetachableModel model;
>
>
>     public DisabledIfEmptyMarkupContainer(String id, LoadableDetachableModel
> model) {
>         super(id);
>         this.model = model;
>         setOutputMarkupPlaceholderTag(true);
>     }
>
>
>     @SuppressWarnings("unchecked")
>     @Override
>     protected void onBeforeRender() {
>         super.onBeforeRender();
>         if (((Collection) model.getObject()).isEmpty()) {
>             add(new VisibilityFalseAttributeModifier());
>         }else {
>             add(new VisibilityTrueAttributeModifier("block"));
>         }
>         model.detach();
>
>     }
>
>
> }
>
>
> Is something wrong that i can't see?
>
>
>
> --
> View this message in context: http://www.nabble.com/OutOfMemoryError%3A-Java-heap-space-tf4950580.html#a14177105
>
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: OutOfMemoryError: Java heap space

Posted by Sergio García <sg...@denodo.com>.

igor.vaynberg wrote:
> 
> looks like your page has a reference to some huge object which causes
> a problem when the page is serialzed - so maybe that loadable
> detachable model of yours is not very detachable...
> 
> 
> -igor
> 



I don't know what i'm doing wrong. I have a abstract detachable model:



    private abstract class OfferListModel extends LoadableDetachableModel{
        @Override
        protected Object load() {
            String stateAsString = stateDropDown.getModelObjectAsString();
            Integer year = (Integer) yearDropDown.getModelObject();
            String userAsString = userDropDown.getModelObjectAsString();
            
            if (StaticComboLists.OFFER_STATE_ALL.equals(stateAsString)) {
                stateAsString = null;
            }
            
            if (StaticComboLists.USER_FILTER_ALL.equals(userAsString)) {
                userAsString = null;
            }else {
                userAsString = getSignInSession().getUser().getLogin();
            }
            
            OffersListParameters parameters = 
                new OffersListParameters(userAsString, year, stateAsString);
            
            ClassifiedOffersList offersList =
offersService.findOffers(parameters); 
            
            return offersList;
        }
    }

And eight implementations of it, like this one:

    private class BeingPreparedOfferListModel extends OfferListModel{
        private static final long serialVersionUID = -1772413039827980131L;

        @Override
        protected Object load() {
            ClassifiedOffersList offersList = (ClassifiedOffersList)
super.load();
            return offersList.getBeingPrepared();
        }
    }


Each instance is used like this:

        BeingPreparedOfferListModel beingPreparedOfferListModel = 
            new BeingPreparedOfferListModel();

        beingPreparedContainer = 
            new DisabledIfEmptyMarkupContainer("beingPreparedContainer",
beingPreparedOfferListModel);
beingPreparedContainer.add(new
beingPreparedOfferListView("beingPreparedListView",beingPreparedOfferListModel));

Where the ListView has a reference to a detachable model, and
DisabledIfEmptyMarkupContainer has a reference also to the DetachableModel:

public class DisabledIfEmptyMarkupContainer extends WebMarkupContainer{

    private static final long serialVersionUID = 8749215642567364820L;
    private LoadableDetachableModel model;
    
    
    public DisabledIfEmptyMarkupContainer(String id, LoadableDetachableModel
model) {
        super(id);
        this.model = model;
        setOutputMarkupPlaceholderTag(true);
    } 
    
    
    @SuppressWarnings("unchecked")
    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
        if (((Collection) model.getObject()).isEmpty()) {
            add(new VisibilityFalseAttributeModifier());
        }else {
            add(new VisibilityTrueAttributeModifier("block"));
        }
        model.detach();
        
    }
    
    
}


Is something wrong that i can't see?



-- 
View this message in context: http://www.nabble.com/OutOfMemoryError%3A-Java-heap-space-tf4950580.html#a14177105
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: OutOfMemoryError: Java heap space

Posted by Igor Vaynberg <ig...@gmail.com>.
looks like your page has a reference to some huge object which causes
a problem when the page is serialzed - so maybe that loadable
detachable model of yours is not very detachable...


-igor


On Dec 5, 2007 8:00 AM, Sergio García <sg...@denodo.com> wrote:
>
> Hi,
>
> I have a memory problem on my wicket app. It's being developed, so there is
> no reason for a memory problem. The class that throws this exception has a
> intensive use of LoadableDetachableModel.
>
>
> 2007-12-05 16:56:12,032 ERROR [[WicketApplication]]
> (StandardWrapperValve.java:253) - Servlet.service() para servlet
> WicketApplication lanzó excepción
> java.lang.OutOfMemoryError: Java heap space
>         at java.util.Arrays.copyOf(Unknown Source)
>         at java.io.ByteArrayOutputStream.write(Unknown Source)
>         at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
>         at
> java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown
> Source)
>         at java.io.ObjectOutputStream.writeObject0(Unknown Source)
>         at java.io.ObjectOutputStream.writeObject(Unknown Source)
>         at
> org.apache.wicket.util.io.IObjectStreamFactory$1.writeObjectOverride(IObjectStreamFactory.java:65)
>         at java.io.ObjectOutputStream.writeObject(Unknown Source)
>         at org.apache.wicket.util.lang.Objects.objectToByteArray(Objects.java:1085)
>         at
> org.apache.wicket.protocol.http.pagestore.AbstractPageStore.serializePage(AbstractPageStore.java:198)
>         at
> org.apache.wicket.protocol.http.pagestore.DiskPageStore.storePage(DiskPageStore.java:708)
>         at
> org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap.put(SecondLevelCacheSessionStore.java:337)
>         at org.apache.wicket.Session.requestDetached(Session.java:1360)
>         at org.apache.wicket.RequestCycle.detach(RequestCycle.java:1019)
>         at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1266)
>         at org.apache.wicket.RequestCycle.request(RequestCycle.java:489)
>         at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:343)
>         at
> org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:139)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:183)
>         at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
>
>
>
> Reasons?
> --
> View this message in context: http://www.nabble.com/OutOfMemoryError%3A-Java-heap-space-tf4950580.html#a14174603
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org