public class SessionFactory {

    private SessionFactory() {
    }    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}        return session;
    } /**
     *  Rebuild hibernate session factory
     *
     */
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
     *  Build hibernate session factory
     *
     */
    public static void buildSessionFactory() {
        try {
            if(sessionFactory==null){
                configuration.configure(configFile);
                sessionFactory = configuration.buildSessionFactory();
            }
        } catch (Exception e) {
            System.err
                    .println("%%%% Error Creating SessionFactory %%%%");
            e.printStackTrace();
        }
    }
    /**
     *  Close hibernate session factory
     *
     */
    public static void closeSessionFactory() {
        try {
            if(sessionFactory!=null){
                configuration=null;
                if(!sessionFactory.isClosed())
                   sessionFactory.close();
                sessionFactory=null;
                threadLocal.set(null);
           }
        } catch (Exception e) {
            System.err
                    .println("%%%% Error Close SessionFactory %%%%");
            e.printStackTrace();
        }
    }
/**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);        if (session != null) {
            session.close();
        }
    } /**
     *  return session factory
     *
     */
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
} /**
     *  return session factory
     *
     * session factory will be rebuilded in the next call
     */
public static void setConfigFile(String configFile) {
SessionFactory.configFile = configFile;
sessionFactory = null;
} /**
     *  return hibernate configuration
     *
     */
public static Configuration getConfiguration() {
return configuration;
}}      一个静态的SessionFactory被初始化以后,何时内存会被回收?
     我的项目跑在websphere6.0上.重启websphere会释放静态的SessionFactory成员变量吗?

解决方案 »

  1.   

    你把它设置为null之后,进入可回收状态。
      

  2.   

    SessionFactory一但被初始化以后,就会占用内存.
    一般我们在方法调用结束会去关闭SessionFactory的.
    SessionFactory是单利模式,如果没有去显示的关闭,他的周期会一直到浏览器的关闭.
      

  3.   

    不明白你的意思.浏览器关闭跟我数据库session有关系吗?您是否理解成浏览器的session了
      

  4.   

    我的web项目启动的时候会创建静态成员变量SessionFactory 
        private static org.hibernate.SessionFactory sessionFactory;
    此变量何时内存会被回收?是不我的项目一直开着.SessionFactory 就一直占用着内存.重启websphere后会被释放吗?谢谢
      

  5.   

    专为static 这个词来的 
      

  6.   

    只要web容器项目处于运行状态就一直存活,除非被重置。
      

  7.   

    static的变量与类对象无关,无论是web还是桌面小程序,一旦开始运行于jvm中,这个变量便会随类的加载而被单独分配内存存放,其生命周期直到这个jvm停止运作。
    当static被置为null真的可以被gc收回所占用的内存空间??
      

  8.   

    内存回收否?和容器有关系吗?容器不也是跑在jdk分配的空间内吗???
    jdk的回收,程序不能控制吧
      

  9.   


       我重启was6.0后  类的static成员变量内存会被回收吗?给个确定的答案!这对我来说很重要