![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 69
整理 java 虚拟机相关知识
盼兮猫
长亭外 古道边 芳草碧连天
展开
-
Java HotSpot 垃圾回收器
新生代垃圾回收器Serial 垃圾收集器单线程,垃圾回收期间 Stop The World。采用复制算法,优点是简单高效。ParNew 垃圾收集器多线程,多条 GC 线程并行进行垃圾回收,回收期间 Stop The World。采用复制算法,和 Serial 唯一区别在于使用多线程,追求低停顿时间,多核 CPU 环境下效率高,单核 CPU 环境下效率不如 SerialParallel Scavenge 垃圾收集器多线程,追求 CPU 吞吐量。采用复制算法CPU吞吐量:程序运行的时原创 2021-05-07 17:19:16 · 59 阅读 · 0 评论 -
Java 垃圾回收
Java 内存通过 JVM 自动管理,这里管理主要包含内存的使用和回收。如果只有使用没有回收,内存迟早被用完。作为开发者我们应该了解回收的场景,这样有助于排查内存泄漏问题垃圾回收的场景GC 主要关注不再使用的对象,而对象都创建在堆区,堆区有时候也被称为 GC区。总的来说,方法区和堆区是 GC 关注的主要区域。如何确定一个对象不再使用引用计数法:早期 GC 策略,通过判断对象的引用数量来决定对象是否可以被回收。对象每次被引用,引用计数加一,取消引用则减一,如果一个对象的引用计数为0,则它可以被回收原创 2021-04-21 22:08:36 · 81 阅读 · 0 评论 -
JAVA 对象使用
在 HotSpot 中,对象的内存布局分以下三个区域:对象头:包含 markWord 和 Class 对象指针,数组还记录数据长度实例数据:对象实际数据填充数据:对齐其中 MarkWrod 包含以下信息:哈希码GC 分代年龄锁状态标识对象持有的锁偏向线程 ID偏向时间戳Class 对象指针指向具体的类对象。实例数据:成员变量的值,其中包含父类成员变量和本类成员变量填充数据:保证对象的长度是8字节的整数倍,可有可没有对象的创建过程检查类是否被加载,没有就先加载类类加原创 2021-05-07 15:44:58 · 88 阅读 · 0 评论 -
Java 类加载器
JVM 自身定义了如下三种类加载器:根类加载器(Bootstrap):加载 Java 的核心类(如 rt.jar里所有的class),由C++实现,开发者无法直接获取类加载器的引用拓展类加载器(Extensions):加载JRE的扩展目录,lib/ext 或者由 java.ext.dirs 系统属性指定目录中的 JAR 包的类。由 Java 语言实现,父类加载器为 null系统类加载器(System):加载用户类路径(ClassPath)上所指定的类库,父类加载器为 Extensions。原创 2021-04-13 15:48:45 · 90 阅读 · 0 评论 -
Java 类加载过程
JVM 通过将描述类信息的 .class 字节码文件加载到内存实现代码的运行,其中这个加载过程就叫类加载。上图是类的整个生命周期图,其中从加载到初始化整个过程统称类加载。加载将字节码从不同的数据源转化为二进制字节流加载到内存中,并生成一个代表该类的 java.lang.Class 对象通过全限定类名来获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口原创 2021-04-13 11:11:29 · 67 阅读 · 0 评论 -
JAVA 内存区域
JAVA 虚拟机在程序运行时会把自己管理的内存划分为以上几个模块,其中各模块有着自己的用途以及创建销毁时机。其中堆区和元数据区线程共享,其它模块各线程私有。元数据区不等同于方法区,它是方法区的一种实现。方法区是 JVM 抽象出的一个概念,在 JDK8 之前它是通过永久代实现的,而元数据区是 JDK8 Hotspot 虚拟机的具体实现。元数据区:存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。元数据区还包含运行时常量池,运行时常量池主要用于存放编译器生成的各种字面量和符号.原创 2021-04-08 16:11:28 · 75 阅读 · 0 评论