JVM
文章平均质量分 94
《深入理解Java虚拟机》
小成同学_
This is your lucky day.
展开
-
JVM-第17章-再谈类的加载器
JVM—再谈类的加载器大厂面试题蚂蚁金服深入分析ClassLoader,双亲委派机制类加载器的双亲委派模型是什么?一面:双亲委派机制及使用原因百度都有哪些类加载器,这些类加载器都加载哪些文件?手写一个类加载器DemoClass的 forName(“java.lang.String”) 和 Class的 getClassLoader() 的 loadclass(“java.lang.String”) 有什么区别?腾讯什么是双亲委派模型?类加载器有原创 2022-05-19 21:59:05 · 512 阅读 · 0 评论 -
JVM-第16章-类的加载过程详解
JVM—类的加载过程详解类的加载过程(类的生命周期)大厂面试题蚂蚁金服描述一下JVM加载Class文件的原理机制?一面:类加载过程百度类加载的时机java类加载过程?简述java类加载机制?腾讯JVM中类加载机制,类加载过程?滴滴JVM类加载机制美团Java类加载过程描述一下jvm加载class文件的原理机制京东什么是类的加载?哪些情况会触发类的加载?讲一下JVM加载一个类的过程JVM的类加载机制是什么?原创 2022-05-18 12:51:41 · 257 阅读 · 2 评论 -
JVM-第15章-垃圾回收器
JVM—垃圾回收器1. GC分类与性能指标垃圾回收器概述垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。垃圾回收器分类按 线程数 分(垃圾回收线程数),可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。➢ 在诸如原创 2022-05-14 15:18:43 · 559 阅读 · 2 评论 -
JVM-第14章-垃圾回收相关概念
JVM—垃圾回收相关概念1. System.gc()的理解在默认情况下,通过 System.gc() 或者 Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc() 调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效)。JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻原创 2022-05-13 13:57:38 · 158 阅读 · 0 评论 -
JVM-第13章-垃圾回收相关算法
JVM—垃圾回收相关算法1. 标记阶段:引用计数算法对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法 和 可达性分析算法。原创 2022-05-12 11:45:48 · 172 阅读 · 1 评论 -
JVM-第12章-垃圾回收概述
JVM—垃圾回收概述前言Java 和 C++ 语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:➢ 哪些内存需要回收?➢ 什么时候回收?➢ 如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收原创 2022-05-11 12:50:14 · 103 阅读 · 1 评论 -
JVM-第11章-字符串常量池(StringTable)
JVM—字符串常量池(StringTable)1. String的基本特性String:字符串,使用一对 “” 引起来表示String s1 = "atguigu" ; // 字面量的定义方式String s2 = new String("hello"); // new对象的方式String被声明为final的,不可被继承。String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小。原创 2022-05-09 12:03:34 · 591 阅读 · 0 评论 -
JVM-第10章-执行引擎(Execution Engine)
JVM—执行引擎(Execution Engine)1. 概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机原创 2022-05-08 16:17:44 · 178 阅读 · 1 评论 -
JVM-第9章-对象的实例化、内存布局与访问定位 & 直接内存(Direct Memory)
JVM—对象的实例化、内存布局与访问定位大厂面试题美团对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服Java对象头有什么?1. 对象的实例化创建对象的步骤1. 判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载,解析和初始化(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLo原创 2022-05-07 18:37:27 · 169 阅读 · 1 评论 -
JVM-第8章-方法区(Method Area)
JVM—方法区(Method Area)运行时数据区结构图1. 栈、堆、方法区的交互关系2. 方法区的理解方法区在哪里?《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区可以看作是一块独立于Java堆的内存空间。方法区的基本理解方法区(Method Area)与Java堆一样,是各个线原创 2022-05-06 12:12:43 · 435 阅读 · 2 评论 -
JVM-第7章-堆(Heap)
JVM—堆(Heap)1. 堆的核心概述堆对于一个JVM进程来说是唯一的。也就是一个进程只有一个JVM实例,一个JVM实例中就有一个运行时数据区,一个运行时数据区只有一个堆和一个方法区。但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间。➢ 堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但原创 2022-05-03 13:29:02 · 263 阅读 · 5 评论 -
JVM-第6章-本地方法接口(Native Method Interface)& 本地方法栈(Native Method Stack)
JVM—本地方法(Native Method)本地方法接口轮到圈红的这两位了,它们不在我们的运行时数据区,主要讲的是本地方法接口,而本地方法库其实就是一些 C/C++ 的库函数。概述什么是本地方法?简单地讲,一个 Native Method 是一个Java调用非Java代码的接囗。一个 Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在 C++ 中,你可以用 extern “C” 告知原创 2022-05-01 12:26:18 · 341 阅读 · 2 评论 -
JVM-第5章-虚拟机栈(Java Virtual Machine Stack)
JVM—虚拟机栈(Java Virtual Machine Stack)1. 概述每个线程独有 栈生命周期跟线程一致 不存在GC 存在OOMJava虚拟机栈是什么?Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,是线程私有的。生命周期:生命周期和线程一致。作用:主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的原创 2022-04-29 10:21:42 · 233 阅读 · 3 评论 -
JVM-第4章-程序计数器(Program Counter Register)
JVM—程序计数器(Program Counter Register)也叫 PC寄存器,可以理解为集合的迭代器。概述每个线程独有,无GC不会报异常。JVM 中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中原创 2022-04-27 12:07:25 · 465 阅读 · 3 评论 -
JVM-第3章-运行时数据区(Runtime Data Area)概述及线程
JVM—运行时数据区(Runtime Data Area)概述及线程运行时数据区概述虚拟机中的进程与线程Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区:其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰色的为单独线程私有的,红色的为多个线程共享的。即:线程独有:独立包括程序计数器、栈、本地方法栈线程间共享:堆、堆外内存(永久代或元空间、代码缓存)每个JVM只有一个Runti原创 2022-04-26 16:48:40 · 173 阅读 · 2 评论 -
JVM-第2章-类加载子系统(Class Loader Subsystem)
JVM—类加载子系统(Class Loader Subsystem)1. 内存结构概述简图详细图(英文版)详细图(中文版)注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器执行引擎2. 类加载器子系统类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(ca fe ba be)。ClassLoader 只负责class文件的加载原创 2022-04-22 22:33:39 · 251 阅读 · 1 评论 -
JVM-第1章-前言(JVM与Java体系结构)
JVM前言Java—跨平台的语言JVM—跨语言的平台JVM的位置JVM的整体结构Java代码执行流程JVM的架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说 这两种架构之间的区别:基于栈的指令集架构特点:设计和实现更简单,适用于资源受限的系统;避开了寄存器的分配难题:使用零地址指令方式分配指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现不需要硬件支持,可移植性更原创 2022-04-21 15:02:18 · 178 阅读 · 2 评论