
JVM
文章平均质量分 88
zxfhahaha
这个作者很懒,什么都没留下…
展开
-
【JVM】垃圾回收相关面试题
蚂蚁金服你知道哪几种垃圾回收器,各自的优缺点,重点讲一下CMS和G1?JVM GC算法有哪些,目前的JDK版本采用什么回收算法?G1回收器讲下回收过程GC是什么?为什么要有GC?GC的两种判定方法?CMS收集器与G1收集器的特点百度说一下GC算法,分代回收说下垃圾收集策略和算法天猫JVM GC原理,JVM怎么回收内存CMS特点,垃圾回收算法有哪些?各自的优缺点,他们共同的缺点是什么?滴滴Java的垃圾回收器都有哪些,说下G1的应用场景,平时你是如何搭配使用垃圾回收原创 2021-01-23 15:11:27 · 134 阅读 · 0 评论 -
【JVM】17、垃圾回收器
垃圾回收器GC 分类与性能指标垃圾回收的分类评估 GC 的性能指标GC 分类与性能指标垃圾回收的分类按线程数分(垃圾回收线程数)串行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。并行垃圾回收器并行收集可以运用多个CPU同时执行垃圾回收,因此提升了应用的吞吐量,不过并行回收仍然与串行回收一样,采用独占式,使用了“Stop-the-World”机制。按照工作模式分并发式垃圾回收器并发式垃圾回收器与应用程原创 2021-01-22 11:27:42 · 1334 阅读 · 0 评论 -
【JVM】16、垃圾回收相关概念
垃圾回收相关概念System.gc() 的理解手动gc理解不可达对象的行为内存溢出与内存泄露内存溢出OOM内存泄漏(Memory Leak)Stop the World并行与并发程序的并行与并发垃圾回收的并行与并发安全点与安全区域安全点(Safepoint)安全区域(Safe Region)引用强引用软引用弱引用虚引用(Phantom Reference)终结器引用System.gc() 的理解System.gc() 其实调用的是Runtime.getRuntime().gc(),gc()是native原创 2021-01-22 02:07:54 · 184 阅读 · 1 评论 -
【JVM】15、垃圾回收相关算法
垃圾回收相关算法垃圾标记阶段的算法引用计数算法(Reference Counting)可达性分析算法可达性分析算法基本思路GC Roots 可以是哪些元素(面试高频)可达性分析注意事项GC Roots溯源对象的 finalization 机制finalize() 方法机制对象的三种可能的状态finalize() 具体执行过程清除阶段标记-清除算法(Mark-Sweep)复制算法复制算法执行过程复制算法的优缺点标记-压缩(整理)算法 Mark-Compact标记-压缩算法的执行流程标记-压缩算法与标记-清除算原创 2021-01-21 22:25:02 · 134 阅读 · 0 评论 -
【JVM】14、垃圾回收概述
垃圾回收概述什么是垃圾为什么需要GC早期垃圾回收Java 垃圾回收机制自动内存管理GC 的作用区域什么是垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。An object is considered garbage when it can no longer be reached from any pointer in the running program.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其原创 2021-01-21 12:42:53 · 114 阅读 · 0 评论 -
【JVM】13、StringTable
StringTabeleString的基本特性String 底层 Hashtable 结构String 内存结构的分配位置调整String位置的原因String 的基本操作字符串拼接操作字符串拼接相关面试题拼接操作底层原理String的基本特性String:字符串,使用一对 “” 引起来表示String s1 = "mogublog" ; // 字面量的定义方式String s2 = new String("moxi"); // new 对象的方式String声明为f原创 2021-01-20 18:14:51 · 186 阅读 · 0 评论 -
【JVM】12、执行引擎
执行引擎执行引擎概述执行引擎执行引擎的工作过程Java 代码编译和执行过程解释执行和即时编译解释器JIT编译器机器码、指令、汇编语言机器码指令和指令集汇编语言高级语言字节码执行引擎概述执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器执行引擎执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受原创 2021-01-20 00:28:21 · 130 阅读 · 0 评论 -
【JVM】10、直接内存
直接内存native memory 和direct memory直接内存BIO 与NIONIO直接内存与 OOM直接内存大小设置java.lang.OutOfMemoryError: Direct buffer memory直接内存缺点JVM内存结构参考native memory 和direct memory这部分参考JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。Native Memory和Off-heap是一个概念,没有相应的参数来控制大小,其大小依原创 2021-01-19 23:18:24 · 453 阅读 · 0 评论 -
【JVM】10、对象的实例化内存布局与访问定位
对象的实例化内存布局与访问定位对象的实例化创建对象的方式对象创建过程对象的内存布局图解内存布局对象的访问定位对象的两种访问方式句柄访问直接指针面试题对象的实例化创建对象的方式new最常见的方式变形:单例类中调用getInstance的静态类方法变形:XXXFactory的静态方法Class的newInstance方法在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 publicConstructor的newInstance(Xxxx)反射的方式,可以调用原创 2021-01-19 21:26:21 · 158 阅读 · 0 评论 -
【JVM】运行时数据区总结与大厂面试题
运行时数据区相关面试题JVM内存分区堆方法区运行时数据区整体图:JVM内存分区说一下JVM内存模型吧,有哪些区?分别干什么的?(百度三面)JVM内存分哪几个区,每个区的作用是什么?(蚂蚁金服)JVM内存分布/内存结构?(蚂蚁金服一面)jvm内存分区(小米)Java的内存分区(字节跳动讲讲vm运行时数据库区(字节跳动)JVM的内存结构(京东)Jvm内存模型以及分区,需要详细到每个区放什么。(天猫)JVM内存分哪几个区,每个区的作用是什么?(拼多多)java内存分配(美团)原创 2021-01-19 14:11:42 · 185 阅读 · 0 评论 -
【JVM】9、方法区
方法区栈 堆 方法区的交互关系方法区的理解Hotspot 方法区的演进过程设置方法区大小与OOMjdk7永久代JDK8 元空间方法区OOM方法区的内部结构从线程共享与否的角度看运行时数据区结构图:ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及独立会话管理线程共享->ThreadLocal->线程私有也是一个递进的关系栈 堆 方法区的交互关系方法区的理解官方文档《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的原创 2021-01-19 00:07:16 · 132 阅读 · 0 评论 -
【JVM】8、堆
堆堆的核心概述堆内存细分设置堆大小与OOM设置堆大小OOM年轻代与老年代对象分配过程对象分配的一般过程对象分配的特殊情况GC垃圾回收器年轻代GC(Minor GC)老年代GC MajorFull GCGC日志分析堆空间分代思想内存分配策略为每个线程分配的TLAB堆空间参数设置空间分配担保堆是分配对象的唯一选择么?逃逸分析逃逸的几种情况逃逸分析之代码优化栈上分配同步省略/锁消除分离对象或标量替换堆小结参考堆的核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆原创 2021-01-18 20:43:14 · 170 阅读 · 0 评论 -
【JVM】6、本地方法接口 7、本地方法栈
本地方法接口本地方法参考本地方法接口在图示的右下角部分本地方法一个Native Method是一个Java调用非Java代码的接囗该方法的实现由非Java语言实现,比如C。在java代码里,使用native修饰的方法就是本地方法,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。标识符native可以与所有其他的java标识符连用,但是abstract除外为什么要使用 Native Method?Java使用起来非原创 2021-01-18 10:24:37 · 110 阅读 · 0 评论 -
【JVM】5、虚拟机栈
虚拟机栈虚拟机栈概述虚拟机栈的基本内容虚拟机栈的主要特点虚拟机栈的异常设置栈内存大小栈的存储单位栈的运行原理栈帧的内部结构局部变量表局部变量表概念字节码中方法内部结构的剖析局部变量表的基本存储单元:SlotSlot的重复利用静态变量和局部变量的对比操作数栈操作数栈执行流程int i = 8i++和++i栈顶缓存技术动态链接(指向运行时常量池的方法引用)方法返回地址一些附加信息方法的调用静态链接与动态链接静态链接动态链接早期绑定与晚期绑定早期绑定晚期绑定虚方法与非虚方法虚拟机中调用方法的指令方法重写虚方法表虚原创 2021-01-17 22:37:03 · 230 阅读 · 1 评论 -
【JVM】4、程序计数器(PC寄存器)
程序计数器(PC寄存器)PC Register介绍PC RegisterPC寄存器作用PC寄存器面试问题PC Register介绍这节讲的就是运行时数据区的PC寄存器部分PC RegisterProgram Counter Register,程序计数寄存器/PC寄存器JVM的PC寄存器是对物理PC寄存器的一种抽象模拟。JVM的PC寄存器是程序钩子程序钩子可以理解为是钩线程中一行一行的代码,可以理解为行号指示器,即执行上一行代码下一行该执行谁了由PC寄存器做一个记录。它是一块很小的内存空间原创 2021-01-17 10:51:32 · 218 阅读 · 0 评论 -
【JVM】3、运行时数据区概述及线程
运行时数据区概述及线程运行时数据区运行时数据区的结构内存线程JVM线程JVM 系统线程运行时数据区在类加载完成后的阶段,就是运行时数据区当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品运行时数据区的结原创 2021-01-17 10:12:37 · 150 阅读 · 0 评论 -
【JVM】2、类加载器与类的加载过程
类加载器与类的加载过程JVM架构类加载子系统类加载器子系统作用类的加载过程JVM架构JVM架构:英文版中文版类加载子系统类加载子系统部分如下图:类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(coffebabe 魔数)。字节码文件是物理磁盘上的文件ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine(执行引擎)决定。加载的类信息存放于一块称为方法区的内存空原创 2021-01-16 19:46:18 · 166 阅读 · 0 评论 -
【JVM】1、字节码、JVM整体结构、声明周期、发展历程
JVM整体结构字节码虚拟机JAVA虚拟机JVM整体结构JAVA代码执行流程字节码Java虚拟机是解释运行字节码文件的,如下图其他语言只要通过其编译器生成了对应字节码文件就可以在java虚拟机上运行。我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。Java虚拟机与Java语言并没有必然的联系,它只与特定的二原创 2021-01-16 16:18:15 · 430 阅读 · 0 评论 -
【JVM】类加载
JVM类加载KlassInstanceKlassInstanceMirrorKlass(镜像类)InstanceRefKlassInstanceClassLoaderKlassArrayKlassTypeArrayKlassObjArrayKlass类的加载过程加载Klassclass和klass的区别:class是java类(java代码klass是java类在JVM的存在形式(c++代码Klass类分别由InstanceKlass和ArrayKlass继承,其中InstanceClass用原创 2021-01-16 13:17:16 · 274 阅读 · 0 评论