1. Java / Говнокод #7639

    +77

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    @SuppressWarnings("unchecked")
    public void addImage(String key, Bitmap bmp){
    		
    	if(memCache.size() >= MAX_CACHE_SIZE){
    			
    		Object[] array = (Entry[]) cacheUsage.entrySet().toArray();
    			
    		Arrays.sort(array, new Comparator<Object>(){
    				
    			public int compare(Object object1, Object object2) {
    				return (Integer)(((Map.Entry<String, Integer>)object1).getValue()) - 
    						(Integer)(((Map.Entry<String, Integer>)object2).getValue());
    			}
    		});
    			
    		String keyForRemove = ((Map.Entry<String, Integer>)array[0]).getKey();
    		memCache.remove(keyForRemove);
    		cacheUsage.remove(keyForRemove);
    	}
    	
    }

    до чего довело желание всё оптимизацировать

    Запостил: KoirN, 24 Августа 2011

    Комментарии (20) RSS

    • *оптимизировать
      Ответить
    • совершенно лишние игры с массивами, все прекрасно можно делать и через коллекции
      Ответить
    • а вообще для кэша прекрасно подходит WeakHashMap
      Ответить
      • А ещё есть у LinkedHashMap есть неплохая фишка: от неё можно унаследоваться и переопределить метод removeEldestEntry для автоматического поддержания постоянного размера.
        Ответить
        • наверное, пусть сами слабые ссылки решат, что удалить в первую очередь
          Ответить
          • Слабые ссылки не гарантируют постоянного (и, следовательно, ограниченного) размера кэша. К тому же, возможна ситуация: мы обработали изображение, отдали в сеть, ссылок на него нет, его захавал GC, из кэша оно пропало. Клиент подумал, нажал F5...
            В общем, тут, как всегда, всё зависит от контекста.
            Ответить
            • слабые ссылки ничего не могут гарантировать, но могут помочь в организации кэша с довольно низкой вероятностью встречи с OutOfMemoryException. А чтобы ничего не пропало, нужно использовать обыкновенные жесткие ссылки.

              если вдруг что-то пропало из кэша, это не страшно - еще раз загрузим. Зато мы будем грузить не каждый раз.

              Использование обычной карты в качестве кэша вводит нам в обязанность следить за размером кэша и сумарным размером находящихся там элементов
              Ответить
    • Даже не знаю, что здесь смешнее — генерики или алгоритмы.
      Ответить
    • @SuppressWarnings("unchecked")
      Собачки в пхп мне всегда больше всего доставляли. Макаки тоже.
      Ответить
      • Как бы эти собачки к пэхэпешным отношения практически не имеют.
        Ответить
        • >практически не имеют. (:
          Ответить
          • в данном случае - тоже аннотация затыкания ругани
            Ответить
            • Затыкание - типичное применение собачек в пхп. (:
              Ответить
              • А вот в java - довольно нетипичное. Тестирование, DI, генерация кода и дескрипторов, ... у аннотаций куча применений.
                Ответить
      • это аннотации. в данном случае означают полное неумение автора работать с дженериками
        Ответить
        • да, в этом случае "unchecked" преводится как "нихрена я не понимаю в этих скобочках, идите все нахрен"
          Ответить
    • vanished
      Ответить

    Добавить комментарий