新生区、永久区、堆内存调优

新生区

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

老年区


真理:经过研究,99%的对象都是临时对象!

永久区

这个区域常驻内存的。用来存放JDK自身携带的Class对象。Interface元数据,存储的是Java运行时的一些环境或类信息这个区域不存在垃圾回收!关闭JVM虚拟就会释放这个区域的内存
一个启动类,加载了大量的第三方jar包。Tomcat部署了太多的应用,大量动态生成的反射类。不断的被加载。直到内存满,就会出现OOM;

  • jdk1.6之前︰永久代,常量池是在方法区;
  • jdk1.7 :永久代,但是慢慢的退化了,去永久代,常量池在堆中.
  • jdk1.8之后∶无永久代,常量池在元空间


逻辑上存在:物理上不存在

package com.wang.jvm;

public class Demo02 {
    public static void main(String[] args) {
        //返回虚拟机试图使用的最大内存
        long maxMemory = Runtime.getRuntime().maxMemory();

        //返回JVM的初始化总内存
        long totalMemory = Runtime.getRuntime().totalMemory();

        System.out.println("maxMemory="+maxMemory+"字节\t"+(maxMemory/(double)1024/1024)+"MB");
        System.out.println("totalMemory="+totalMemory+"字节\t"+(totalMemory/(double)1024/1024)+"MB");
        //默认情况下:分配的总内存是电脑内存的1/4,而初始化的内存:1/64
    }
    //OOM:
        //1.尝试扩大堆内存看结果
        //2.分析内存,看一下哪个地方出现了问题(专业工具)
    //-Xms1024m -Xmx1024m -XX:+PrintGDetails
}
posted @   摘星丶仙  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示