程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java知識點總結(不定時更新),java定時更新

Java知識點總結(不定時更新),java定時更新

編輯:JAVA綜合教程

Java知識點總結(不定時更新),java定時更新


1、基於分代的垃圾收集算法

  設計思路:把對象按照壽命長短來分組,分為年輕代和年老代,新創建的對象被分在年輕代,如果對象經過幾次回收後仍然存活,那麼再把這個對象劃分到年老代。年老代的收集頻率不像年輕代那麼頻繁,這樣就減少了每次垃圾回收時所要掃描的對象的數量,從而提高了垃圾回收效率。

  把堆劃分為若干個子堆,每個堆對應一個年齡代:

  JVM將整個堆劃分為Young區、Old區和Perm區,存放不同年齡的對象,這個三個區存放的對象有如下區別:

  Young區:又分為Eden區和兩個Survivor區,其中所有新創建的對象都在Eden區,當Eden區滿後會觸發minor GC將Eden區仍然存活的對象復制到其中一個Survivor區中,另外一個Survivor區中的存活對象也復制到這個Survivor中,以保證始終有一個Survivor區是空的。

  Old區:存放的是Young區的Survivor滿後觸發的minor GC後仍然存活的對象,當Eden區滿後會將對象存放到Survivor區中,如果Survivor區仍然存不下這些對象,GC收集器會將這些對象直接存到Old區,如果在Survivor區中的對象足夠老,也直接存放到Old區,如果Old區也滿了,將會觸發Full GC,回收整個堆內存。

  Perm區:存放的主要是類的Class對象,Perm區的垃圾回收也是由Full GC觸發的。

2、JVM參數配置

  

  參考:http://www.cnblogs.com/likehua/p/3369823.html,http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

  

  最小內存值就是-Xms的值,即10240m

  -Xmn 5120m:表示年輕代大小,-XXSurvivorRatio=3,即Eden:FromSurvivor:ToSurvivor=3:1:1;所以Survivor一共是10240*(2/5)=2048m。

3、集合框架的線程安全性

  

A,Vector相當於一個線程安全的List B,HashMap是非線程安全的,其對應的線程安全類是HashTable C,Arraylist是非線程安全的,其對應的線程安全類是Vector D,StringBuffer是線程安全的,相當於一個線程安全的StringBuilder E,Properties實現了Map接口,是線程安全的

4、Collection接口和Map接口

  請看下面兩張圖:   

  

5、HashMap排序

public class SortMap
{
    public static void main(String[] args)
    {
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("1d", 4);
        map.put("2b", 3);
        map.put("3a", 1);
        map.put("4c", 2);
        System.out.println("原始數據:");
        // 排序前
        for(String s:map.keySet())
        {
            System.out.println(s+":"+map.get(s));
        }
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
        
        // 根據key值排序
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
            {
                return o1.getKey().toString().compareTo(o2.toString());
            }
        });
        System.out.println("根據key值排序:");
        // 根據key值排序後
        for (Entry<String, Integer> entry : list)
        {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        // 根據value排序
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
            {
                return o1.getValue()-o2.getValue();
            }
        });
        System.out.println("根據value值排序:");
        // 根據value值排序後
        for (Entry<String, Integer> entry : list)
        {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved