![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 90
始末丶Yzx
这个作者很懒,什么都没留下…
展开
-
十二、七款经典垃圾收集器
十二、七款经典垃圾收集器GC分类评估GC的性能指标七款经典的垃圾收集器Serial回收器: 串行回收ParNew回收器: 并行回收Parallel回收器: 吞吐量优先CMS回收器: 低延迟工作原理CMS的优点CMS的弊端CMS的参数设置小结G1回收器: 区域化分代式介绍工作原理GC分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直到垃圾收集结束在单CPU处理器或较小的应用内存等硬件平台不是特别优越原创 2021-02-02 09:04:14 · 556 阅读 · 0 评论 -
十一、垃圾回收其他相关概念
十一、垃圾回收其他相关概念System.gc()的理解内存溢出(OOM)内存泄漏(Memory Leak)Stop The World并发与并行垃圾回收的并发与并行安全区域引用强引用(StrongReference): 不回收软引用(SoftReference): 内存不足即回收弱引用(WeakReference): 发现即回收虚引用(PhantomReference): 对象回收跟踪终结器引用(FinalReference)System.gc()的理解默认情况下,通过System.gc()或者Run原创 2021-01-29 10:41:19 · 139 阅读 · 0 评论 -
十、垃圾回收及相关算法
十、垃圾回收及相关算法垃圾为什么需要GCJava垃圾回收机制判断垃圾相关算法引用计数算法(Java未采用)可达性分析算法(Java, C#采用)GC Roots对象的finalization机制获取dump文件垃圾清除阶段标记-清除算法(Mark-sweep)复制算法(Copying)标记-压缩算法(Mark-Compact)标记-清除算法与标记-压缩算法对比三种算法小结指针碰撞分代收集算法增量收集算法分区算法垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾如果不及时对内存原创 2021-01-29 10:04:39 · 134 阅读 · 0 评论 -
九、StringTable
九、StringTableString基本特性String的内存分配StringTable为什么要从永久代调整到堆中字符串拼接拼接操作与append效率对比intern()的使用new String("ab") 创建几个对象new String("a") + new String("B") 创建几个对象intern使用总结String基本特性String: 字符串,使用一堆 “” 引起了表示String声明为final,不可继承String实现了Serializable接口:表示字符串可序列化,实原创 2021-01-27 10:35:55 · 103 阅读 · 0 评论 -
八、执行引擎
八、执行引擎概述工作过程Java代码编译解释器JIT编译器Java是半编译半解释型语言字节码解释器JIT编译器即时编译技术热点代码热点衰减Hotspot设置执行方式Hotspot VM中JIT分类C1和C2编辑器优化策略概述是java虚拟机核心组成部分之一执行引擎是由软件自行实现,可以不收物理条件制约的定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式JVM的主要任务时复制装载字节码到其内部,但字节码并不能直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,内部包含原创 2021-01-27 10:08:01 · 88 阅读 · 0 评论 -
七、对象实例化
七、对象实例化对象实例化创建对象的方式创建对象的步骤对象内存布局对象头实例数据对齐填充对象访问定位直接内存对象实例化创建对象的方式new对象和调用静态方法Class的newInstance() 反射方式,只能调用空参构造器,权限publicConstructor的newInstance(xxx) : 反射方式,可以空参,有参构造器,无权限要求使用clone() : 不调用任何构造器,需实现CLoneable接口的clone()方法使用反序列化 : 从文件中等获取一个对象的二进制流第三方库O原创 2021-01-27 09:50:03 · 81 阅读 · 0 评论 -
六、运行时数据区(四)方法区
六、运行时数据区(四)方法区栈,堆,方法区的交互关系方法区JDK7及JDK8实现设置方法区内存大小解决OOM内部结构与储存信息类型信息域信息方法信息non-final的类变量运行时常量池与常量池常量池为什么需要常量池常量池存储的数据类型运行时常量池方法区演进细节元空间替换永久代原因StringTable调整原因方法区的垃圾收集总结栈,堆,方法区的交互关系方法区<Java虚拟机规范> 中明确说明: “尽管所有的方法区在逻辑上是属于堆的一部分, 但一些简单的实现可能不会选择去进行垃圾收集或原创 2021-01-27 09:33:27 · 84 阅读 · 0 评论 -
五、运行时数据区(三)堆
五、运行时数据区(三)堆堆核心概述内存结构堆空间大小设置年轻代与老年代对象分配过程特殊情况常用调优工具Minor GC、Major GC、Full GC年轻代GC(Minor GC)触发机制老年代GC(Major GC / Full GC)触发机制Full GC 触发机制堆空间分代思想内存分配策略对象分配过程: TALB为什么有TLAB什么是TLAB堆空间参数设置堆是分配对象的唯一选择吗逃逸分析参数设置代码优化栈上分配同步省略标量替换小结堆核心概述一个JVM实例只存在一个堆内存, 堆也是Java内存管原创 2021-01-26 17:03:50 · 106 阅读 · 0 评论 -
四、运行时数据区(二)虚拟机栈
四、运行时数据区(二)虚拟机栈虚拟机栈特点可能出现的异常设置栈的大小栈帧弹出方式栈中存储虚拟机栈面试题虚拟机栈每个线程在创建时都会创建一个虚拟机栈, 其内部保存一个个的栈帧, 对应这一次次的Java方法调用,线程私有的. 生命周期与线程一致. 主管java程序的运行,保存方法的局部变量, 部分结果, 并参与方法的调用和返回特点内存小,跨平台性,指令集小,编译器容易实现,访问速度仅次于PC寄存器JVM直接对Java栈的操作只有 进栈和出栈栈不存在GC问题, 存在OOM, PC寄存器即不存在G原创 2021-01-26 16:20:45 · 76 阅读 · 0 评论 -
三、运行时数据区(一)
运行时数据区(一)结构图程序计数器(PC寄存器)为什么设定为线程私有?本地方法栈栈与堆结构图JDK8 的元数据区 + JIT编译产物 就是 JDK7及以前的方法区线程私有: 程序计数器, 虚拟机栈, 本地方法栈线程共享: 堆 , 对外内存 (方法区永久代或元空间, 代码缓存)一般来说JVM优化 95% 是优化堆区, 5% 是优化方法区程序计数器(PC寄存器)PC寄存器是用来存储指向下一条指令的地址, 也即将要执行的指令代码. 由执行引擎读取下一条他是一个很小的空间,几乎可以忽略不计, 也原创 2021-01-26 16:08:43 · 83 阅读 · 0 评论 -
二、类装载子系统
类装载子系统类装载子系统位置作用加载链接模块验证准备解析初始化类加载器分类获取ClassLoader的途径双亲委派机制沙箱安全机制类装载子系统位置作用类加载子系统负责从文件系统或者网络中加载class文件, class文件在文件打开头有特定的文件标识classLoader只负责class文件的加载,至于他是否可以运行, 则有Execution Engine 决定加载的类信息存放于一块称为方法区的内存空间,除了类的信息外,方法区中还会存放运行时常量池信息,可能还包含字符串字面量和数字常量(这部分原创 2021-01-26 14:49:06 · 70 阅读 · 0 评论 -
一、 JVM简介
JVM简介什么是JVM常见的JVMJava内部体系结构JVM位置JVM架构图JVM架构模型JVM生命周期虚拟机的启动虚拟机的执行虚拟机的退出什么是JVM运行编译好的Java文件生成的 .class 文件,并解析为当前运行系统所对应的指令.Java程序的跨平台性主要指字节码文件可以在任何具有Java虚拟机的计算机或电子设备上运行,Java虚拟机中的Java解释器复制将字节码文件解释成特定的机器码进行运行.常见的JVMSUN ClassicExact VMHotSpot VM : HotSpot原创 2021-01-26 14:33:51 · 120 阅读 · 0 评论