2016-03-22 25 views
1

'da çalışmıyor gibi görünüyor. Aşağıdaki yöntemde 2 döngü için vardır. kayıt ekleme sayısı kod yürütme yaklaşık 3.5 saat boyunca çalışır ve son bulur 864000. olacak şekilde, 24 defa 36000 kat ve iç forloop yinelenir yineler Firstloop. (Kayıt ekleme başarısız) Oturum kapama ve işlemin tamamlama sadece döngü için dıştan sonra yapılır. [Tam GC (ergonomi) [PSYoungGen: 979968K Ben bellek ayırmaÇöp toplama, java

17034,595 belirtmek için GC günlüğünün son satırları eklenmiş

@SuppressWarnings("unchecked") 


public void createBRResults() { 

    List<BusinessRules> businessRuleList = null; 
    Organization organization = null; 
    Brresults brresults = null; 
    Criteria criteria = null; 
    Criteria newCriteria = null; 
    String brStatus = "Live"; 
    Date date = new Date(); 
    Session session = sessionFactory.openSession(); 
    Transaction transaction = null; 
    try { 
     if (callInfos == null) { 
      callInfos = getEntities(CallInfo.class); 
     } 
     for (CallInfo callInfo : callInfos) { 
      transaction = session.beginTransaction(); 
      criteria = session.createCriteria(BusinessRules.class); 
      criteria.createCriteria("businessGoals").add(
        Restrictions.eq("category", callInfo.getCategory())); 
      businessRuleList = criteria.list(); 
      organization = callInfo.getOrganization(); 
      for (BusinessRules businessRule : businessRuleList) { 
       brresults = new Brresults(); 
       brresults.setBusinessRule(businessRule); 
       brresults.setCallInfo(callInfo); 
       brresults.setCreatedDate(date); 
       brresults.setModifiedDate(date); 
       brresults.setOrganization(organization); 
       brresults.setBrrStatus(brStatus); 
       brresults.setBrrValue(Math.random() < 0.5 ? 0 : 1); 
       session.save(brresults); 
       brresults = null; 
      } 
      criteria = null; 
      organization = null; 
      businessRuleList = null; 
      session.flush(); 
      session.clear(); 
      transaction.commit(); 
      System.gc(); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } finally { 
     session.close(); 
    } 
} 

RAM tüketimi yürütülmesi sırasında yaklaşık 6.9GB olduğu bulunmuştur -> 979964K (1862144K)] [ParOldGen: 5576158K-> 5576158K (5576192K)] 6556126K-> 6556123K (7438336K), [Çizim alanı: 23195K-> 23195K (1071104K)], 2.1041939 sn] [Zaman: kullanıcı = 8.61 sys = 0.00 real = 2.11 saniye]

17036,699: [Tam GC (ergonomi) [PSYoungGen: 979968K-> 979964K (1862144K)] [ParOldGen: 5576158K-> 5576158K (5576192K)] 6556126K-> 6556123K (7438336K), [Met aspace: 23195K-> 23195K (1071104K)], 1.5930338 sn] [Zaman: kullanıcı = 9.39 sys = 0.00, reel = 1.59 sn] 17038.292: [Tam GC (Ergonomi) [PSYoungGen: 979968K-> 979964K (1862144K)] [ ParOldGen: 5576158K-> 5576158K (5576192K)] 6556126K-> 6556122K (7438336K), [Metaspace: 23195K-> 23195K (1071104K)], 1.9376959 secs] [Kez: kullanıcı = 8.51 sys = 0.00, real = 1.94 saniye]

17040.230: [Tam GC (Ergonomi) [PSYoungGen: 979968K-> 830418K (1862144K)] [ParOldGen: 5576158K-> 5576027K (5576192K)] 6556126K-> 6406445K (7438336K), [Metaspace: 23196K-> 23196K (1071104K) ], 2.9929302 sn] [Times: kullanıcı =

Yığın PSYoungGen toplam 1862144K, 889367K kullanıldığında 17.97 sys = 0.00, gerçek = 3.00 saniye] [0x0000000715d80000, 0x00000007bdc80000, 0x00000007c0000000)

) alan 882176K gelen ,% 0 alanı 885760K için [0x0000000787f00000,0x0000000787f00000,0x00000007bdc80000) kullanılan 0x0000000715d80000,0x000000074c205e48,0x0000000751a80000

eden uzay 979968K,% 90 kullanılmış [% 0 kullanılan [0x0000000751a80000,0x0000000751a80000,0x0000000787b80000) ParOldGen 5576192K toplam 5576027K kullanılan [boşluk 5576192K [0x00000005c1800000,0x0000000715d56d38,0x0000000715d80000) Metaspace kullanılan% 99 23223K kullanılan nesne, kapasite 23502K, 24064K işlenen 0x00000005c1800000, 0x0000000715d80000, 0x0000000715d80000) , 1071104K 2443K kullanılan sınıf alan, kapasite 2537K ayrılmış kararlı 2560K, ayrılmış 1048576K

i her 24 yineleme için tekrar oturum ve açılış kapanış ediyorsam

Ama, ekleme başarılı ve geçen süre 55 dk kaydeder. ama RAM kullanımı 3GB civarında geliyor.

Neden çöp toplama düzgün bir şekilde gerçekleşmiyor? Koddaki hatalar nelerdir? Eğer aynı oturumda iki kez sormak için tam aynı nesneyi size geri vermek zorunda beri Session

cevap

4

, dokunduğunuz tüm nesnelere başvurular topluyor. Periyodik onun bağlamını atmak için izin kapatın gerekir.

+0

Her yineleme için oturumu kapatmamı söylüyorsunuz. Eğer öyleyse, toplu ekleme yapmak için doğru yolu bu mu? – Popeye

+0

@sriram Periyodik olarak kapatmayı söylüyorum. Bu her yineleme veya başka bir aralıkta olabilir, hangisi kodunuzu daha anlamlı hale getirirse. Sadece oturum bunun için güçlü bir önbellek ve hesabına yer vermesi kabul etmemiz gerekir. – chrylis

İlgili konular