JVM理解
Posted a393060727
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。程序性能得以提高。根据机器的不同,内存设置大小不一致。
以上是关于JVM理解的主要内容,如果未能解决你的问题,请参考以下文章