8.新生区、老年区、堆内存调优

新生区

  • 类:诞生和成长的地方,甚至死亡
  • 伊甸园区,所有的对象都是在伊甸园区new出来的
  • 幸存者区(0,1)

老年区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y9Ocusyg-1617103822455)(E:\JAVA\java学习笔记\JVM\思维导图\新生区.png)]

经过研究,99%的对象都是临时对象

永久区

这个区域常驻内存的,用来存放JDK自身携带的Class对象。interface元数据,存储的是java运行时的一些环境或类信息,这个区域不存在垃圾回收,关闭虚拟机就会释放这个区域的内存

一个启动类,加载了大量的第三方jar包。Tomcat部署了太多的应用,大量动态生成的反射类。不断地被加载,直到内存满了,就会出现OOM

jdk1.6之前:永久代,常量池在方法区

jdk1.7 :永久代,但是慢慢的退化了,去永久代,常量池在堆中

jdk1.8 :无永久代,常量池在元空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWV51DM5-1617103822457)(E:\JAVA\java学习笔记\JVM\思维导图\堆详细分区.png)]

元空间:逻辑上存在,物理上不存在

package com.faq;

public class Demo2 {
    public static void main(String[] args) {
        //返回虚拟机试图使用的最大内存
        long max = Runtime.getRuntime().maxMemory();//字节 1024*1024
        //返回jvm的初始化总内存
        long total = Runtime.getRuntime().totalMemory();

        System.out.println("max="+max+"字节\t"+(max/(double)1024/1024)+"MB");
        System.out.println("total="+total+"字节\t"+(total/(double)1024/1024)+"MB");
    }
    //默认情况下:分配的总内存是电脑内存的1/4,而初始化的内存:1/64

    //7.7
    //~1/4

	//OOM:
        //1.尝试扩大内存看结果
        //2.分析内存,看一下哪个地方出现了问题(专业工具)
    //-Xms1024m -Xmx1024m -XX:+PrintGCDetails


}

![(E:\JAVA\java学习笔记\JVM\思维导图\内存调试.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzolyUfv-1617103822459)(E:\JAVA\java学习笔记\JVM\思维导图\内存调试.png)]
在这里插入图片描述

package com.faq;

import java.util.Random;

//-Xms8m -Xmx8m -XX:+PrintGCDetails

public class Hello {
    public static void main(String[] args) {
        String str ="kuangshenshuojava";

        while(true){
            str += str + new Random().nextInt(888888888)+new Random().nextInt(99999999);
        }
    }
}

输出:
[GC (Allocation Failure) [PSYoungGen: 1536K->488K(2048K)] 1536K->640K(7680K), 0.0327592 secs] [Times: user=0.00 sys=0.00, real=0.03 secs]  //轻GC
[GC (Allocation Failure) [PSYoungGen: 1893K->496K(2048K)] 2045K->928K(7680K), 0.0008436 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 1926K->495K(2048K)] 2358K->1343K(7680K), 0.0007825 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 1643K->288K(2048K)] 3579K->2767K(7680K), 0.0010120 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 875K->288K(2048K)] 4442K->3863K(7680K), 0.0007268 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 288K->256K(2048K)] 3863K->3831K(7680K), 0.0004091 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (Allocation Failure) [PSYoungGen: 256K->0K(2048K)] [ParOldGen: 3575K->2221K(5632K)] 3831K->2221K(7680K), [Metaspace: 3277K->3277K(1056768K)], 0.0057339 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] //重GC
[Full GC (Ergonomics) [PSYoungGen: 1166K->0K(2048K)] [ParOldGen: 5485K->2766K(5632K)] 6652K->2766K(7680K), [Metaspace: 3302K->3302K(1056768K)], 0.0073002 secs] [Times: user=0.03 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) [PSYoungGen: 61K->96K(2048K)] 5003K->5037K(7680K), 0.0006968 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 96K->64K(2048K)] 5037K->5005K(7680K), 0.0002639 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (Allocation Failure) [PSYoungGen: 64K->0K(2048K)] [ParOldGen: 4941K->3878K(5632K)] 5005K->3878K(7680K), [Metaspace: 3307K->3307K(1056768K)], 0.0060809 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3332)
	at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
	at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:674)
	at java.lang.StringBuilder.append(StringBuilder.java:208)
	at com.faq.Hello.main(Hello.java:10)
[GC (Allocation Failure) [PSYoungGen: 0K->0K(2048K)] 3878K->3878K(7680K), 0.0003874 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
[Full GC (Allocation Failure) [PSYoungGen: 0K->0K(2048K)] [ParOldGen: 3878K->3858K(5632K)] 3878K->3858K(7680K), [Metaspace: 3307K->3307K(1056768K)], 0.0062870 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 2048K, used 45K [0x00000000ffd80000, 0x0000000100000000, 0x0000000100000000)
  eden space 1536K, 2% used [0x00000000ffd80000,0x00000000ffd8b6d8,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
 ParOldGen       total 5632K, used 3858K [0x00000000ff800000, 0x00000000ffd80000, 0x00000000ffd80000)
  object space 5632K, 68% used [0x00000000ff800000,0x00000000ffbc4ab0,0x00000000ffd80000)
 Metaspace       used 3339K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 363K, capacity 388K, committed 512K, reserved 1048576K

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值