zoukankan      html  css  js  c++  java
  • 堆内存的初步诊断

      我们知道堆中存放的是对象,对象不被引用就会被垃圾收集回收掉。但是如果对象一直存在强引用,那么就会一直存活,当存活对象达到一定数量时,就会把堆内存占满,从而发生堆内存溢出错误。比如有这样一段代码:逻辑是每次都往集合中添加一个字符串对象,然后字符串进行一次拼接。

    public class Demo1 {
        public static void main(String[] args) {
            int count = 0;
            StringBuilder sb = new StringBuilder();
            List<String> list = new ArrayList<>();
            String a = "hello";
            try {
                while (true) {
                    list.add(a);
                    sb.append(a);
                    count++; 
                }
            } catch (Throwable e) {
                e.printStackTrace();
                System.out.printf("count: %d", count);
            }
        }
    }

    运行一会后报错:“java.lang.OutOfMemoryError: Java heap space”

    我们用参数 -Xmx 对堆内存进行设置再运行下程序,同样的错误,只不过循环次数变少了。

    我们可以在控制台输入命令 “jvisualvm”来查看堆内存的变化,要在Java VisualVM 中安装Visual GC 插件。运行某个java程序,点击左边的进程就可以查看堆内存各个区的变化了。

  • 相关阅读:
    创建pdf
    IOS绘图
    IOS断点续传
    IOS程序之间的跳转
    MBProgressHUD的使用
    清除缓存的方法(计算)
    使用post请求下载数据
    NSTimer的使用
    定位功能(使用系统地图)
    fork仓库保持同步更新
  • 原文地址:https://www.cnblogs.com/fly-bryant/p/13281250.html
Copyright © 2011-2022 走看看