zoukankan      html  css  js  c++  java
  • java核心-JVM-gc面试题

    1.写一个memory leak的例子

    public class MemonyLeak {
    
        //1.memoryLeak内存泄漏
        /*
            这类错误报错具体显示:java.lang.OutOfMemoryError: java heap space
            导致原因,是gc无法回收不再使用的对象,这些无用的对象导致堆内存不足。
            通常有成员变量或全局变量导致,解决办法就是定义好变量的作用范围
         */
    
        Map<String, List<String>> a;
    
        public void printSomething(){
    
            ArrayList<String> content = new ArrayList<>();
            for(int i=0;i<10000000;i++){
                content.add(i+i+i+i+System.currentTimeMillis()+"");
            }
            a = new HashMap<>();
            a.put("aa", content);
            System.out.println(a.hashCode());
        }
    
    
        public static void  main(String[] args){
            MemonyLeak memonyLeak1 = new MemonyLeak();
            memonyLeak1.printSomething();
            MemonyLeak memonyLeak2 = new MemonyLeak();
            memonyLeak2.printSomething();
            MemonyLeak memonyLeak3 = new MemonyLeak();
            memonyLeak3.printSomething();
            MemonyLeak memonyLeak4 = new MemonyLeak();
            memonyLeak4.printSomething();
            MemonyLeak memonyLeak5 = new MemonyLeak();
            memonyLeak5.printSomething();
            MemonyLeak memonyLeak6 = new MemonyLeak();
            memonyLeak6.printSomething();
        }
    }
    

    执行了好半天,结果报错了

    解决办法:

    将成员变量写到方法printSomething()里面
    
        public void printSomething(){
            Map<String, List<String>> a;
            ArrayList<String> content = new ArrayList<>();
            for(int i=0;i<10000000;i++){
                content.add(i+i+i+i+System.currentTimeMillis()+"");
            }
            a = new HashMap<>();
            a.put("aa", content);
            System.out.println(a.hashCode());
        }
    

    执行结果

    可见对于内存泄漏的问题可能来源了对象的作用域定义不合理,成员变量或全局变量的对象作用域比较宽,gc来不及回收容易造成内存泄漏

  • 相关阅读:
    一个空类会生成哪些默认函数
    What is VMR(Video Mixing Render)From MSDN
    DirectX backface culling(背面剔除)
    D3DPOOL(资源池)
    两道概率题供大家周末把玩
    空间两点间的距离
    n != n, n == n
    C++默认参数
    D3DPT_TRIANGLELIST与D3DPT_TRIANGLESTRIP
    D3D中的设备丢失
  • 原文地址:https://www.cnblogs.com/leeethan/p/10961324.html
Copyright © 2011-2022 走看看