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来不及回收容易造成内存泄漏

  • 相关阅读:
    python 装饰器
    函数嵌套,函数对象
    函数的形参和实参
    函数
    周末复习知识1
    文件修改 文件处理
    字符编码,文件管理
    安卓CTS官方文档之兼容性测试套件简介-attach
    安卓CTS官方文档之兼容性测试套件简介
    MPEG-DASH on IIS Practice in Action-attach
  • 原文地址:https://www.cnblogs.com/leeethan/p/10961324.html
Copyright © 2011-2022 走看看