Hasmap 中weakhashmap

今天小G講一下hash,今天看spring源碼的時候發現有一個地方使用weakHashMap,可能大家項目中很少用這個weakHashMap,下面就是看從spring源碼中看到一個spring

如圖在做Cglib驗證的時候出現如下:

    /** Keeps track of the Classes that we have validated for final methods */
    private static final Map<Class<?>, Boolean> validatedClasses = new WeakHashMap<>();
    //省去其他的信息
    /**
     * Checks to see whether the supplied {@code Class} has already been validated and
     * validates it if not.
     */
    private void validateClassIfNecessary(Class<?> proxySuperClass, @Nullable ClassLoader proxyClassLoader) {
        if (logger.isWarnEnabled()) {
            synchronized (validatedClasses) {
                if (!validatedClasses.containsKey(proxySuperClass)) {
                    doValidateClass(proxySuperClass, proxyClassLoader,
                            ClassUtils.getAllInterfacesForClassAsSet(proxySuperClass));
                    validatedClasses.put(proxySuperClass, Boolean.TRUE);
                }
            }
        }
    }
  • 從上面看,可能大家還看不出爲什麼使用weakhash,首先小G講下,對weakHash理解,首先jvm,
    gc處理器,垃圾回收,對一些弱性的引用,會直接回收內存,weakHash的key就是引用就是弱的引用,在大家不使用的時候,可以進行回收,這樣類滾動一樣
    ,內存一直可以循環使用,看上面其實就是爲做驗證進行的,所以使用weakhash最好不過,所以當一些緩存或者對key的存活要求不高的就可以使用;
  • 不過其中有一個疑問?如果大家知道可以評價解析爲小G,就是class放入到weakhash中,如果這個class被引用的話,其實這個內存就不會回收?這樣是不是很降低驗證,不過這個也可能是spring令一個特殊點,其實class後續進行釋放,不知道這個回答對不對,獻醜
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章