阅读量:2
本文主要介绍:JVM 内存分哪几个区,每个区的作用是什么 备注:
橙色:堆 和 方法区 ,属于jvm公有部分,可以进行调优 灰色:java栈,本地方法栈和计数器 属于jvm的私有部分,不可进行调优
经过一轮GC后,绝大多数的对象会被回收,仅剩下5个对象存活 第三步: 再创建100个对象+5=105对象 又经过第二轮gc之后,仍有5个存活,其中有2个是上一轮留下的
第四步: 经过15轮gc 后仍然存活的对象 会存入到养老区。 第五步: 养老区中也会进行GC,一旦养老代gc速度赶不上对象的产生速度了,就会OOM,出现jvm挂机
准备:为类的静态变量分配内存空间并赋予初始值 解析:类加载器加载类所需的其他类 初始化:为类以及变量赋予真正的值 使用:类的调用 卸载:类的垃圾回收
橙色:堆 和 方法区 ,属于jvm公有部分,可以进行调优 灰色:java栈,本地方法栈和计数器 属于jvm的私有部分,不可进行调优
一个对象从创建到被回收的过程是怎样的?
Personp=new Person() 100个对象 第一步: 100个对象创建之后,会存储到新生代中的伊甸园区 第二步:经过一轮GC后,绝大多数的对象会被回收,仅剩下5个对象存活 第三步: 再创建100个对象+5=105对象 又经过第二轮gc之后,仍有5个存活,其中有2个是上一轮留下的
第四步: 经过15轮gc 后仍然存活的对象 会存入到养老区。 第五步: 养老区中也会进行GC,一旦养老代gc速度赶不上对象的产生速度了,就会OOM,出现jvm挂机
类是如何加载进内存中?
核心是需要classLoader 会涉及双亲委派机制所以分类自上而下的去罗列 Bootstrap ClassLoader根加载器 rt.jar Extension ClassLoader扩展类加载器 Application ClassLoader 应用类加载器 用户自定义类加载器如果 自定义String总结过程:
三大步 :加载---->连接---->初始化 七小步 :加载---->验证---->准备---->解析---->初始化---->使用---->卸载 加载:将class文件加载到内存中 验证:验证字节码文件的正确性准备:为类的静态变量分配内存空间并赋予初始值 解析:类加载器加载类所需的其他类 初始化:为类以及变量赋予真正的值 使用:类的调用 卸载:类的垃圾回收