Finding Memory Usage in Java

后端 未结 8 2443
野趣味
野趣味 2021-02-09 13:52

Following is the scenario i need to solve. I have struck with two solutions.

I need to maintain a cache of data fetched from database to be shown on a Swing GUI. Wheneve

8条回答
  •  不要未来只要你来
    2021-02-09 13:59

    Very late after the original post, I know, but I thought I'd post an example of how I've done it. Hopefully it'll be of some use to someone (I stress, it's a proof of principal example, nothing else... not particularly elegant either :) )

    Just stick these two functions in a class, and it should work.

    EDIT: Oh, andimport java.util.ArrayList; import java.util.List;

    public static int MEM(){
        return (int)(Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory() +Runtime.getRuntime().freeMemory())/1024/1024;
    }
    
    public static void main(String[] args) throws InterruptedException
    {
        List list = new ArrayList();
    
        //get available memory before filling list
        int initMem = MEM();
        int lowMemWarning = (int) (initMem * 0.2);
        int highMem = (int) (initMem *0.8);
    
    
        int iteration =0;
        while(true)
        {
            //use up some memory
            list.add(Math.random());
    
            //report
            if(++iteration%10000==0)
            {
                System.out.printf("Available Memory: %dMb \tListSize: %d\n", MEM(),list.size());
    
                //if low on memory, clear list and await garbage collection before continuing
                if(MEM()

    EDIT: This approach still relies on sensible setting of memory in the jvm using -Xmx, however.

    EDIT2: It seems that the gc request line really does help things along, at least on my jvm. ymmv.

提交回复
热议问题