JVM
古士召
萌新一枚
展开
-
垃圾回收器
垃圾回收器GC分类与性能指标垃圾收集器分类**按线程数分**按工作模式分按碎片处理方式分评估GC的性能指标性能指标:吞吐量性能指标:暂停时间吞吐量vs暂停时间不同的垃圾回收器概述垃圾回收器发展史7种经典的垃圾收集器7款经典收集器与垃圾分代之间的关系垃圾收集器的组合关系如何查看默认垃圾收集器Serial回收器:串行回收总结ParNew回收器:并行回收Parallel回收器:吞吐量优先参数配置CMS回收器:低延迟CMS为什么不使用标记整理算法?优点缺点设置的参数小结JDK后续版本中CMS的变化G1回收器:区域化原创 2020-09-09 22:18:43 · 547 阅读 · 0 评论 -
垃圾回收相关概念
垃圾回收相关概念System.gc()的理解手动GC来理解不可达对象的回收内存溢出内存泄漏举例Stop The World垃圾回收的并行与并发并发并行并发和并行对比垃圾回收的并行与并发安全点与安全区域安全点安全区域再谈引用再谈引用:强引用举例总结再谈引用: 软引用再谈引用:弱引用再谈引用:虚引用案例终结器引用System.gc()的理解在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发FullGC,同时对老年代和新生代进行回收,尝试释放被丢弃原创 2020-09-09 22:02:50 · 254 阅读 · 0 评论 -
垃圾回收相关算法
垃圾回收相关算法标记阶段:引用计数算法循环引用举例小结标记阶段:可达性分析算法概念思路GC Roots可以是哪些?总结小技巧注意对象的finalization机制注意生存还是死亡?具体过程代码演示MAT与JProfiler的GC Roots溯源MAT是什么?命令行使用 jmap使用JVIsualVM使用MAT打开Dump文件JProfiler的GC Roots溯源如何判断什么原因造成OOM清除阶段:标记-清除算法执行过程什么是清除?缺点清除阶段:复制算法背景核心思想优点缺点注意清除阶段:标记-整理算法背景执原创 2020-09-08 20:11:31 · 273 阅读 · 0 评论 -
垃圾回收概述
垃圾回收概述概念什么是垃圾什么是垃圾?磁盘碎片整理大厂面试题蚂蚁金服百度天猫滴滴京东阿里字节跳动为什么需要GC早期垃圾回收Java垃圾回收机制优点担忧GC主要关注的区域概念这次我们主要关注的是黄色部分,内存的分配与回收什么是垃圾在提到什么是垃圾之前,我们先看下面一张图从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收原创 2020-09-08 20:03:52 · 307 阅读 · 0 评论 -
StringTable
StringTableString的基本特性为什么JDK9改变了结构String的不可变性面试题注意String的内存分配为什么StringTable从永久代调整到堆中String的基本操作字符串拼接操作底层原理拼接操作和append性能对比intern()的使用intern的空间效率测试面试题new String("ab")会创建几个对象new String("a") + new String("b") 会创建几个对象intern的使用:JDK6和JDK7JDK6中JDK7中扩展总结StringTable原创 2020-09-07 17:29:23 · 120 阅读 · 0 评论 -
执行引擎
执行引擎执行引擎概述执行引擎的工作流程Java代码编译和执行过程什么是解释器(Interpreter)什么是IT编译器为什么Java是半编译半解释型语言机器码、指令、汇编语言机器码指令指令集汇编语言高级语言C、C++源程序执行过程字节码解释器解释器分类现状JIT编译器Java代码的执行分类问题来了HotSpot JVM执行方式案例概念解释热点探测技术方法调用计数器热点衰减回边计数器HotSpotVM 可以设置程序执行方法HotSpotVM中 JIT 分类C1 和 C2编译器不同的优化策略分层编译策略总结AO原创 2020-09-07 17:37:43 · 336 阅读 · 0 评论 -
对象实例化内存布局与访问定位和直接内存
目录对象实例化面试题对象创建方式创建对象的步骤判断对象对应的类是否加载、链接、初始化为对象分配内存处理并发问题初始化分配到的内存设置对象的对象头执行init方法进行初始化对象实例化的过程对象内存布局对象头运行时元数据类型指针实例数据(Instance Data)说明小结对象的访问定位图示对象访问的两种方式句柄访问优点直接指针(HotSpot采用)直接内存 Direct Memory非直接缓存区和缓存区存在的问题对象实例化面试题对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有原创 2020-09-06 17:38:55 · 127 阅读 · 0 评论 -
方法区
方法区前言栈、堆、方法区的交互关系方法区的理解HotSpot中方法区的演进设置方法区大小与OOMjdk7及以前JDK8以后如何解决这些OOM方法区的内部结构类型信息域信息方法(Method)信息non-final的类变量全局常量运行时常量池 VS 常量池常量池为什么需要常量池常量池中有什么小结运行时常量池方法区使用举例方法区的演进细节为什么永久代要被元空间替代?StringTable为什么要调整位置静态变量存放在那里?方法区的垃圾回收总结常见面试题前言这次所讲述的是运行时数据区的最后一个部分从线程共原创 2020-09-06 17:24:16 · 2630 阅读 · 2 评论 -
堆
堆堆的核心概念堆内存细分设置堆内存大小与OOMOutOfMemory举例年轻代与老年代图解对象分配过程概念图解过程思考:幸存区区满了后?对象分配的特殊情况代码演示对象分配过程常用的调优工具总结Minor GC,MajorGC、Full GCMinor GCMajor GCFull GCGC 举例堆空间分代思想内存分配策略为对象分配内存:TLAB问题:堆空间都是共享的么?为什么有TLAB?什么是TLABTLAB分配过程小结:堆空间的参数设置堆是分配对象的唯一选择么?逃逸分析逃逸分析举例参数设置结论栈上分配举例原创 2020-09-05 20:45:41 · 141 阅读 · 0 评论 -
本地方法接口和本地方法栈
目录本地方法接口什么是本地方法为什么使用Native Method?与Java环境的交互与操作系统的交互Sun's Java现状本地方法栈本地方法接口什么是本地方法简单地讲,一个Native Methodt是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c++编译器去调用一个c的函数。“A native原创 2020-09-05 20:21:59 · 188 阅读 · 1 评论 -
虚拟机栈
虚拟机栈虚拟机栈概述Java虚拟机栈是什么生命周期作用栈的特点开发中遇到哪些异常?设置栈内存大小栈的存储单位栈中存储什么?栈运行原理栈帧的内部结构局部变量表关于Slot的理解Slot的重复利用静态变量与局部变量的对比操作数栈概念代码追踪栈顶缓存技术动态链接方法调用:解析与分配链接静态链接动态链接绑定机制早期绑定晚期绑定早晚期绑定的发展历史虚方法和非虚方法普通调用指令:动态调用指令:invokednamic指令动态类型语言和静态类型语言方法重写的本质Java 语言中方法重写的本质:IllegalAccessE原创 2020-09-04 22:06:18 · 148 阅读 · 0 评论 -
运行时数据区概述及线程和程序计数器
目录运行时数据区概述及线程前言线程JVM系统线程程序计数器介绍作用代码演示使用PC寄存器存储字节码指令地址有什么用呢?PC寄存器为什么被设定为私有的?CPU时间片运行时数据区概述及线程前言本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区也就是大厨做饭,我们把大厨后面的东西(切好的菜,原创 2020-09-04 21:43:44 · 199 阅读 · 0 评论 -
类加载子系统
类加载子系统概述类加载器子系统作用类的加载过程加载阶段加载class文件的方式链接阶段验证 Verify准备 Prepare解析 Resolve初始化阶段类加载器的分类虚拟机自带的加载器启动类加载器(引导类加载器,Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器(系统类加载器,AppClassLoader)用户自定义类加载器查看根加载器所能加载的目录关于ClassLoader双亲委派机制工作原理双亲委派机制举例沙箱安全机制双亲委派机制的优原创 2020-09-03 21:30:31 · 103 阅读 · 0 评论 -
JVM与Java体系结构
JVM与Java体系结构前言架构师每天都在思考什么?为什么要学习JVMJava vs C++推荐书籍Java生态圈字节码多语言混合编程Java发展的重大事件虚拟机与Java虚拟机虚拟机Java虚拟机JVM的位置JVM整体结构Java代码执行流程JVM的架构模型举例字节码反编译总结栈JVM生命周期虚拟机的启动虚拟机的执行虚拟机的退出JVM发展历程Sun Classic VMExact VMHotSpot VMJRockitIBM的J9KVM和CDC / CLDC HotspotAzul VMLiquid V原创 2020-09-03 21:21:34 · 259 阅读 · 0 评论