JVM理解
类的生命周期,从.class文件被类加载器加载后。。直到被GC销毁。
可以从多个角度看,分析。
- jvm可分为哪几块。。
- 类加载器
- 启动类加载器
- 系统类加载器
- 应用类加载器(拓展类)。
- 运行时区
- 方法区(静态、常量、类的方法。。。)
- 堆(所有在程序中的对象创建,都在这里分配内存信息,这里也是垃圾回收处理的重点区域)
- java栈(每个线程的对象创建后,这里使用的是全局引用地址,真正的全局对象保存在堆中,当然这里还有那些局部,临时变量),.随着线程执行完毕,消亡。
- 程序计数器(程序运行跟踪,计数累计什么的,都在这),.随着线程执行完毕,消亡。
- 本地方法栈(native那些开头的,虽然用的少,但是每个线程创建的时候,都会产生,很底层的东西),.随着线程执行完毕,消亡。
- 执行引擎
- 本地方法接口
- 类加载器
- 运行时区,有哪几块。。
- 垃圾回收过程。。
- 年轻代:from与to的内存分配是一样的大小,每次,内存对象只能在from与to中的一个。他采用的是标记清除的算法,每次执行当在from或to区中内存满了后,就执行一次minGC,将无效的移动到另一个区。当次数达到15次后,移动到年老代
- from
- to
- 年老代:只有fullgc的时候才会清理掉,什么样的对象会产生在这里。比如静态类。。比如全局变量,一直无法回收的对象。当大量的这样的对象产生的时,又一直无法回收的时候,造成内存泄漏。解决就是检查程序为什么会不断创建这样的对象,另一个就是内存设置小了,需要扩容。
- 年轻代:from与to的内存分配是一样的大小,每次,内存对象只能在from与to中的一个。他采用的是标记清除的算法,每次执行当在from或to区中内存满了后,就执行一次minGC,将无效的移动到另一个区。当次数达到15次后,移动到年老代
- 垃圾回收算法:
- jvm参数调优:一般设置min、max的大小一致,也就是初始的内存与最大内存一致,这样程序就不会不断的gc。程序性能得以提高。根据机器的不同,内存设置大小不一致。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?