新生区、永久区、堆内存调优
新生区
- 类:诞生和成长的地方,甚至死亡;
- 伊甸园,所有的对象都是在伊甸园区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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?