
JVM系列
文章平均质量分 93
龙源lll
悲催的2022届程序员/(ㄒoㄒ)/~~
展开
-
Java面试题超详细整理《JVM篇》
JVM由那些部分组成,运行流程是什么?JVM的由以下几部分组成:类加载器(ClassLoader): Java的动态类加载功能由ClassLoader子系统处理。它加载,链接。并在运行时(而非编译时)首次引用类时初始化类文件。运行时数据区(Runtime Data Area): Java虚拟机在执行Java程序的过程中会把它管理的内存分为若干个不同的数据区域。执行引擎(Execution Engine): 分配给运行时数据区的字节码将由执行引擎执行,执行引擎读取字节码并逐段执行。(字节码执行引擎编原创 2021-08-06 10:35:44 · 2337 阅读 · 12 评论 -
String的内存分配与拼接操作
在Java语言中有8种基本数据类型和一种比较特殊的类型String。这些类型为了使它们在运行过程中速度更快、更节省内存,都提供了一种常量池的概念。常量池就类似一个Java系统级别提供的缓存。8种基本数据类型的常量池都是系统协调的,String类型的常量池比较特殊,存储的主要方法有两种:* 直接使用双引号声明出来的String对象会直接存储在常量池中。* 如果不是用双引号声明的String对象,可以使用String提供的intern()方法。原创 2021-07-14 10:17:57 · 985 阅读 · 0 评论 -
《JVM系列》 第九章 -- 垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。串行回收器:Serial、Serial old并行回收器:ParNew、Parallel Scavenge、Parallel old并发回收器:CMS、G1原创 2021-06-20 18:14:58 · 709 阅读 · 11 评论 -
《JVM系列》 第八章 -- 垃圾回收机制
什么是垃圾?垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。为什么需要GC?如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序的结束,被保留的空间无法被其它对象使用,甚至可能导致内存溢出。原创 2021-06-17 13:20:04 · 786 阅读 · 18 评论 -
《JVM系列》 第七章 -- 字节码执行引擎
执行引擎属于JVM的下层,里面包括: 解释器、及时编译器、垃圾回收器。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现*,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。原创 2021-06-14 11:00:51 · 6387 阅读 · 21 评论 -
《JVM系列》 第六章 -- 对象的实例化与内存布局
对象创建的几种方式:new关键字、反射机制、采用clone()方法、使用反序列化方式、采用第三方类库。创建对象的步骤:加载类元信息、为对象分配内存、处理并发问题、初始化分配到的空间、设置对象头信息、执行init方法初始化。内存布局:对象头信息(运行时元数据、类型指针)、实例数据、对齐填充。对象的访问定位:句柄访问、直接指针。原创 2021-06-09 12:37:34 · 415 阅读 · 16 评论 -
《JVM系列》 第五章 -- 堆空间与对象分配
对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,并确定空间大小。此内存区域的唯一目的就是**存放对象实例**,几乎所有的对象实例都在这里分配内存。原创 2021-06-07 22:38:18 · 481 阅读 · 19 评论 -
《JVM系列》 第三章 -- 深入理解JVM运行时数据区
运行时数据区,Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各子的用途,以及创建和销毁时间,有的区域随虚拟机进程的启动而存在,有的区域则依赖用户线程的启动而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存包括以下几个运行时区域:虚拟机栈、本地方法栈、方法区、堆、程序计数器运行时数据区的完整图:原创 2021-06-06 16:37:20 · 692 阅读 · 27 评论 -
《JVM系列》 第四章 -- Java虚拟机栈
Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。同程序计数器一样,它也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个线程在创建时都会创建一个虚拟机栈,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机中入栈到出栈的过程。原创 2021-06-05 18:06:39 · 532 阅读 · 18 评论 -
《JVM系列》 第一章 -- JVM与Java体系结构
什么是虚拟机,虚拟机(Virtual Machine),即一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。原创 2021-06-02 08:26:25 · 825 阅读 · 12 评论 -
《JVM系列》 第二章 -- 类加载器子系统
类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载**,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)原创 2021-06-03 09:57:26 · 566 阅读 · 17 评论