Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6246359
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 24, 20262026-05-24T12:40:30+00:00 2026-05-24T12:40:30+00:00

Trying to make sense of how ConcurrentWeakKeyHashMap responds to memory condition/garbage collection. With the

  • 0

Trying to make sense of how ConcurrentWeakKeyHashMap responds to memory condition/garbage collection.

With the code below in my JUnit test with maxNum == 6000,
the assert statements failed, with size == 4123 (or something similar).

I set my JVM -Xmx to 500m, with the hope of getting 6000, but no luck.

Assuming the size changes because of Garbage Collection, on what condition does the weak key get reclaimed? i.e. “low memory, low something else” condition ?

    int maxNum = 6000;
    int initalCapacity = 2*maxNum;
    ConcurrentMap<String,String> concurrentMap = new ConcurrentWeakKeyHashMap<String,String>(initalCapacity);       

    int count = 0;
    for( int i=0; i<maxNum; i++) {
        String key = "k" + i;
        String value = "v" + i;
        concurrentMap.put(key, value);
        count = i;
        //System.out.println(concurrentMap.size());
    }

    int size = concurrentMap.size();
    assertEquals(size, maxNum);
    System.gc();
    size = concurrentMap.size();
    assertEquals(size, maxNum);

EDIT

By pinning the weak key in a strong object, I always get 6000/maxNumber.
i.e.

    // our strong object 
    List<String> strongList = new ArrayList();
    for( int i=0; i<maxNum; i++) {
        String key = "k" + i;
        String value = "v" + i;
        concurrentMap.put(key, value);

            // key is now pinned in strong object
        strongList.add(key);
    }

    // size will now equal to maxNum, as nothing gets reclaimed
    int size = concurrentMap.size();
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-24T12:40:32+00:00Added an answer on May 24, 2026 at 12:40 pm

    A weak reference gets reclaimed when there is no longer any “strong” reference to the object.

    This happens due to garbage collection, which in turn happens rather unpredictably in the background (or when you run out of memory). In particular it can also happen even when there still is plenty of memory available (especially for objects that “died young”, the system tries to collect those early).

    I would also not assume that ConcurrentWeakHashMap#size is completely accurate all the time. It has a method purgeStaleEntries that you should probably call to get more accurate.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i am trying to make sense of the following result. The test case code
I'm trying to make sense of the example code here (below Examples). I don't
I am going through some pl/sql code with no comments. Trying to make sense
After trying to make sense of the Metrics and Grids page of the (fairly
So for some reason this just doesn't make sense to me. What Im trying
I'm trying to make sense of the CSS float property, and I understand the
I'm trying to make sense on the best way to do automatize a series
I'm trying to make sense of a situation I have using entity framework on
I'm trying to make sense of how cluetip actually works. I have a dummy
I am struggling trying to make sense of using the Git subtree strategy. My

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.