
JVM
Shawn Jeon
Contact e-mail: shawnjeon@163.com
展开
-
JVM垃圾回收-G1收集器(六)
Garbage-First Collector概述区域(Region)Humongous区域特征G1的垃圾回收的过程年轻代回收(Young GC)并发标记过程混合回收(Mixed GC)Full GC配置选项常见的配置方式概述G1是一款面向服务端的垃圾收集器, 主要针对具有大内存以及多处理器的机器Jdk7开始正式使用 启用参数为 -XX:+UseG1GC, Jdk9时成为默认垃圾收集器, 取代了 CMS以及 Parallel& Parallel Old的组合与 CMS相比, 当小内存环境可原创 2020-10-03 20:13:01 · 324 阅读 · 2 评论 -
JVM垃圾回收-Serial收集器& ParNew收集器& Parallel收集器& CMS收集器(五)
Serial GC& ParNew GC& Parallel GC& CMS GCSerial垃圾收集器(串型回收)1. Serial新生代收集器2. Serial Old老年代收集器ParNew垃圾收集器(并行回收)Parallel垃圾收集器(并行回收)CMS垃圾收集器(并发回收)Serial垃圾收集器(串型回收)Serial GC是最基础, 历史最悠久的垃圾收集器, Jdk1.3.1之前回收新生代的唯一选择, 它是一个单线程的串行收集器, 当开始回收时, 将引起所有用户线程原创 2020-09-30 19:15:12 · 363 阅读 · 0 评论 -
JVM垃圾回收-垃圾回收的各种分类& 垃圾收集器的组合关系(四)
垃圾回收的各种分类& 垃圾收集器的组合关系垃圾回收的各种分类垃圾收集器的分类7款经典收集器组合关系近期垃圾收集器发展过程垃圾回收的各种分类垃圾收集器的分类按线程数分类: 分为单核(串行收集器)和多核(并行收集器)单核 CPU中适合使用串行收集器多核 CPU中适合使用并行收集器两种收集器共同点都是采用独占式, 也就是回收时都会 STW按工作模式分类: 分为独占式(串行& 并行)垃圾收集器和并发式垃圾收集器独占式垃圾收集器, 一旦开始回收, 会将所有的用户线程 ST原创 2020-09-29 20:46:07 · 1062 阅读 · 0 评论 -
JVM垃圾回收-强引用, 软引用, 弱引用, 虚引用以及终结器引用(三)
String Reference, Soft Reference, Weak Reference, Phantom Reference, Final Reference概述强引用(String Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)终结器引用(Final Reference)概述对象的引用级别为4种, 由高到低依次分别为: 强引用, 软引用, 弱引用和虚引用强引用(String Reference原创 2020-09-28 20:20:21 · 241 阅读 · 0 评论 -
JVM垃圾回收-finalization机制& 安全点& 安全区域(二)
finalization& Safe Point& Safe Regionfinalization机制概述对象的3种状态销毁对象之前具体判断过程演示例子安全点与安全区域安全点(Safepoint)安全区域(Safe Region)finalization机制概述当垃圾回收时对象被销毁前, 总会先调用对象的 finalize()方法(被调用的前提是必须重写此方法, 同时未被调用过, 因为此方法只会调用一次), 常用于处理资源释放 如关闭文件, 套接字, 数据库连接等对象的3种状态原创 2020-09-27 20:07:36 · 388 阅读 · 0 评论 -
JVM垃圾回收-算法(一)
Algorithm什么是垃圾?为什么需要 GC垃圾回收算法标记阶段:`标记阶段 - 引用计数算法(Reference Counting):``标记阶段 - 可达性分析算法(Reachability Analysis)或又称追踪性垃圾收集(Tracing Garbage Collection)/根搜索算法(GC Roots Tracing):`清除阶段(回收阶段):`清除阶段 - 标记-清除算法(Mark-Sweep):``清除阶段 - 复制算法(Copying):``清除阶段 - 标记-压缩算法(Mark-原创 2020-09-26 20:42:52 · 196 阅读 · 0 评论 -
JVM执行引擎
Execution Engine执行引擎概述编译分为前/后端内部结构解释器(Interpreter)即时编译器(JIT Compiler)即时编译的执行条件Hotspot VM内嵌两种 JIT编译器选择模式虚拟机与物理机的对比物理机上的执行引擎是直接建立在处理器, 缓存, 指令集(如 x86架构的指令集, ARM架构的指令集)和操作系统层面上的, 而虚拟机的执行引擎是由软件自行实现的, 因此不受物理条件制约的定制指令集, 并能够执行那些不被硬件直接支持的指令集格式执行引擎概述class原创 2020-09-25 20:42:36 · 276 阅读 · 0 评论 -
JVM参数调优
Java性能调优常用参数表设置堆大小, 各种堆使用比列和线程堆栈大小设置回收器吞吐量优先时选择并行收集器响应时间优先时选择并发收集器常用参数表参数值说明-Xms4096m设置初始堆大小, 等价于 -XX:InitialHeapSize-Xmx4096m设置最大堆大小, 等价于 -XX:MaxHeapSize, -Xmx = -Xmn + 老年代大小, -Xm...原创 2019-12-10 15:27:17 · 693 阅读 · 2 评论 -
JVM StringTable
StringTableString类的基本特性两种定义方式设置 StringTableJVM版本的演变字符串拼接操作intern()的使用String的垃圾回收相关调优参数String类的基本特性不可变的, 不可被继承的(final类), 支持序列化(实现了 Serializble接口), 可以比较大小(实现了 Comparable接口)两种定义方式字面量方式: 也就是直接使用双引号括起字符串的声明方式此方式会将 String对象直接存储在字符串常量池中String s1 = "a原创 2020-09-23 19:56:44 · 229 阅读 · 1 评论 -
JVM方法区
Method Area概述版本之演变历程元空间与永久代的区别内部结构类型信息常量池(Constant Pool Table)运行时常量池(Runtime Constant Pool)字符串常量池(StringTable)方法区的垃圾回收概述线程间是共享的可以是固定大小或动态扩展大小. 如果系统定义了太多的类, 导致空间不足, 则会抛出内存溢出 OOM虽然方法区在运行时数据区属独立的存在, 但逻辑上属于堆空间版本之演变历程Jdk6或之前的内部实现是永久代(Permanent Space),原创 2020-09-21 21:08:23 · 216 阅读 · 0 评论 -
JVM对象的实例化
Object Instance对象实例化步骤对象的内存布局对象内存布局代码实例对象的访问定位对象实例化步骤判断对应的类是否已加载(1) 当 new一个对象时, 首先检查 new指令的参数(如 new Demo()的类)能否在常量池中定位到一个类的符号引用(即判断类元信息是否存在)(2) 如果没有, 则按双亲委派机制, 使用当前类加载器加载对应的 .class文件, 并生成对应的 Class类对象. 此时如果找不到对应的 .class文件, 则抛出ClassNotFoundException异常原创 2020-09-19 21:04:08 · 236 阅读 · 0 评论 -
JVM堆空间
Heap Space概述内存结构(`分代收集算法`的落地实现)堆内部结构JVM内存逻辑上分为三部分GC(JVM的垃圾回收)GC按回收区域分为两大类GC触发机制GC过程TLAB(Thread Local Allocation Buffer)缓冲区逃逸分析(Escape Analysis), 堆外存储技术简单例子标量替换配置选项概述一个 JVM实例中只存在一个堆空间, 以及在运行时数据区中空间最大的区域, 同时 GC(Garbage Collection, 垃圾收集器)最频繁的区域所有的线程间共享一个堆原创 2020-09-17 22:00:15 · 319 阅读 · 0 评论 -
JVM虚拟机栈& 本地方法栈
Java Virtual Machine Stack& Native Method Stack两种架构模型简介虚拟机栈概述特点区别与堆生命周期可能出的异常(错误)栈的存储单位栈帧的内部结构演示代码字节码执行过程图示本地方法栈概述(Native Method Stack)本地方法两种架构模型简介栈的指令架构模型: 用于资源受限的系统, 操作只有入栈(压栈)和出栈, 使用0地址指令, 因此无需考虑地址分配优点: 移植性强适合跨平台设计缺点: 指令集小(每8位进行对齐), 所以每次操作需要更原创 2020-09-13 16:01:14 · 1694 阅读 · 1 评论 -
JVM类加载器子系统
JVM Class Loader SubSystem概述类加载的过程加载阶段(Loading)链接阶段(Linking)初始化阶段(Initialization)3种类加载器& 自定义加载器获取 ClassLoader的4种方式自定义类加载器(User Defined ClassLoader)双亲委派机制双亲委派机制优势其它类有2种使用方式被动使用例子:7种主动使用的方式概述Java虚拟机中执行的指令称为字节码指令, 类加载器(Class Loader)是负责将字节码(.class)文件按二进原创 2020-09-09 19:57:10 · 302 阅读 · 1 评论