堆内存分为哪几块?
- Young Generation Space 新生区(也称新生代)
- Tenure Generation Space养老区(也称旧生代)
- Permanent Space 永久存储区
- 对象优先分配在 Eden
- 大对象直接进入老年代
- 长期存活的对象将进入老年代
- 动态对象年龄判定
- 空间分配担保
- 当对象在堆创建时 , 将进入年轻代的Eden Space 。
- 垃圾回收器进行垃圾回收时 , 扫描Eden Space和A Suvivor Space , 如果对象仍然存活 , 则复制到B Suvivor Space , 如果B Suvivor Space已经满 , 则复制 Old Gen
- 扫描A Suvivor Space时 , 如果对象已经经过了几次的扫描仍然存活 , JVM认为其为一个Old对象 , 则将其移到Old Gen 。
- 扫描完毕后 , JVM将Eden Space和A Suvivor Space清空 , 然后交换A和B的角色(即下次垃圾回收时会扫描Eden Space和B Suvivor Space 。
主要用来存储长时间被引用的对象 。它里面存放的是经过几次在 Young Generation Space 进行扫描判断过仍存活的对象 , 内存较大 , 垃圾回收频率较小 。
Permanent Space存储不变的类定义、字节码和常量等 。
Class文件Java虚拟机的平台无关性
文章插图
Class文件的组成?Class文件是一组以8位字节为基础单位的二进制流 , 各个数据项目间没有任何分隔符 。当遇到8位字节以上空间的数据项时 , 则会按照高位在前的方式分隔成若干个8位字节进行存储 。
魔数与Class文件的版本【【JVM】关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列】每个Class文件的头4个字节称为魔数(Magic Number) , 它的唯一作用是用于确定这个文件是否为一个能被虚拟机接受的Class文件 。OxCAFEBABE 。
接下来是Class文件的版本号:第5,6字节是次版本号(Minor Version) , 第7,8字节是主版本号(Major Version) 。
使用JDK 1.7编译输出Class文件 , 格式代码为:
文章插图
前四个字节为魔数 , 次版本号是0x0000 , 主版本号是0x0033 , 说明本文件是可以被1.7及以上版本的虚拟机执行的文件 。
- 33:JDK1.7
- 32:JDK1.6
- 31:JDK1.5
- 30:JDK1.4
- 2F:JDK1.3
文章插图
类加载器类加载器的作用是什么?类加载器实现类的加载动作 , 同时用于确定一个类 。对于任意一个类 , 都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性 。即使两个类来源于同一个Class文件 , 只要加载它们的类加载器不同 , 这两个类就不相等 。
类加载器有哪些?
- 启动类加载器(Bootstrap ClassLoader):使用C++实现(仅限于HotSpot) , 是虚拟机自身的一部分 。负责将存放在\lib目录中的类库加载到虚拟机中 。其无法被Java程序直接引用 。
- 扩展类加载器(Extention ClassLoader)由ExtClassLoader实现 , 负责加载\lib\ext目录中的所有类库 , 开发者可以直接使用 。
经验总结扩展阅读
- 2023年9月15日适合入宅吗 2023年9月15日入宅黄道吉日
- 2023年农历八月初一宜祭祖吗 2023年9月15日祭祖黄道吉日
- JVM学习笔记——垃圾回收篇
- 2023年1月27日取蜂蜜行吗 2023年1月27日适合取蜂蜜吗
- 2023年农历正月初六安装房门吉日 2023年1月27日是安装房门的黄道吉日吗
- 2023年1月27日举办成人仪式行吗 2023年1月27日举办成人仪式吉日一览表
- 银手镯变黑是生病了吗?
- 九州缥缈录铁皇结局是什么?
- 向前是什么电视剧的男主角?
- 长脸型适合什么样的眼镜?