——【JVM】
文章平均质量分 64
卡夫卡的熊kfk
总之岁月漫长,然而值得等待
展开
-
一张图看懂JVM的知识架构
一张图看懂JVM的知识架构原创 2023-08-21 20:58:05 · 184 阅读 · 0 评论 -
小仙女讲JVM(1)—综述
大家好,自从上次讲了软考课程之后,本仙女受到了社会各界的一致好评。本仙女怀着用毕生所学回报社会的热忱,打算花大手笔进行JVM的讲解。1、首先,对以上的四部分进行解释。(1)自动内存管理讲的是java运行时数据区里的部分,分为内存划分和垃圾收集器。(2)执行子系统讲的是画红圈的三部分:类文件结构、类加载机制、字节码执行引擎。(3)优化分别为编译期优化和运行期优化。(4)并发讲的是虚拟机...原创 2019-06-18 16:04:03 · 38369 阅读 · 163 评论 -
小仙女讲JVM(8)—高效并发
内存模型内存模式是在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。其主要目标是定义程序中各个变量的访问规则。主内存和工作内存所有的变量都存储在主内存中,每条线程还有自己的工作内存,其工作内存中是被线程使用到的变量的主内存副本拷贝,线程对变量的读取、赋值等操作都必须在工作内存中进行,而不能直接读取主内存中的变量。内存间交互操作从主内存拷贝到工作内存:顺序地执行read...原创 2019-06-22 11:23:51 · 1943 阅读 · 33 评论 -
小仙女讲JVM(7)—JVM优化
还以这个图为例,从.java到.class是编译过程,从.class到机器码是解释过程。下面对其进行分别优化。在优化过程中,对编译阶段的优化主要是对前端编译器的优化,在运行阶段的优化,主要是对即时编译器的优化。编译器优化编译过程以上为javac的编译过程图,以下为javac编译过程的主体代码。下面对其步骤进行详细解读1、解析与填充符号表词法分析将源代码的字符流转变为标记(...原创 2019-06-21 20:31:21 · 1893 阅读 · 16 评论 -
小仙女讲JVM(6)—字节码执行引擎
看到下图的java代码的执行过程,你是不是对其流程脱口而出?.java源码被javac编译成.class文件,.class文件被jvm解释成不同的机器码。那本仙女问你一个问题:JVM只有解释的功能吗?如果你回答是,那就太天真了。JVM不仅有解释的功能,还有编译的功能。JVM中的执行引擎在执行java代码的时候,一般有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选...原创 2019-06-21 16:34:42 · 1342 阅读 · 13 评论 -
小仙女讲JVM(5)—类加载机制
上篇中我们讲解了Class文件,这篇我们说说虚拟机是如何加载这些Class文件的?Class文件中的信息进入到虚拟机后会发生什么变化?这就涉及到了类加载机制。类加载机制是把类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。这一系列的过程都是在程序运行期间完成的。类加载器类加载器就是下图中红框的部分,它通过一个类的全限定名来获取...原创 2019-06-19 16:36:56 · 4337 阅读 · 19 评论 -
小仙女讲JVM(4)—类文件结构
讲完了自动内存管理,我们来说说执行子系统。执行子系统讲解的是JVM如何执行程序。Class文件概述这篇我们只讲讲Class文件。Class文件又名类文件或字节码文件。javac将.java文件(源代码)编译成.class文件(字节码),jvm再将.class文件解释成机器码。Class文件中包含的是Java虚拟机指令集和符号表以及若干其它辅助信息。其是一组以8字节为基础单元的二进制流,没...原创 2019-06-19 14:55:45 · 2562 阅读 · 7 评论 -
小仙女讲JVM(3)—垃圾收集机制
在上一篇中我们说过,自动内存管理分为两部分:给对象分配内存和回收分配给对象的内存。这篇我们说说后者,即回收分配给对象的内存。回收内存要用到垃圾收集机制,英文名儿是GC(Garbage Collection)。在本部分我们要解决如下几个问题:哪些内存需要回收?什么时候回收?如何回收?哪些内存需要回收?堆和方法区的内存需要回收,其余的不需要回收。因为只有堆和方法区是线程共享的,其余...原创 2019-06-19 11:49:16 · 3317 阅读 · 18 评论 -
小仙女讲JVM(2)—内存的划分
我们知道,在C++语言里,如果想使用一个对象,需要对其进行new操作;如果不用这个对象了,需要对其进行delete操作。一旦开发人员忘记写delete语句了,就会造成内存泄露。【内存被对象占用着不还,就叫内存泄露。】而java就聪明了,它从“手动”进化成了“自动”,把内存的控制权力交给了虚拟机。下面我们就来窥探一下jvm是怎么进行自动内存管理的。这是自动内存管理的思维导图,在本篇我们只说说...原创 2019-06-18 20:30:50 · 10479 阅读 · 34 评论 -
【JVM】初识JVM(下)
在上篇博客中,我们说了说JVM的结构和堆的分代,这次我们简单说说JVM的垃圾回收机制和监测。JVM的垃圾回收机制再来看下图,只有方法区和堆是线程共享的,所以只有他俩有垃圾回收机制。其余的都随线程死而死了,也就没有垃圾之说了。何为垃圾?不再被引用的对象就是垃圾。垃圾回收就是将此对象清除出来,释放空间。这样就可以盛放新的对象了。至于方法区是不是和堆中的永久代是一回事,好像没有定论。几种垃圾...原创 2019-01-22 17:11:19 · 1145 阅读 · 16 评论 -
【JVM】初识JVM(上)
平时我们都是用IDE编写好代码后,执行,就能看到效果了。可是我们有没有想过,这其中的流程是怎么样的呢?我们编写的代码是“java语言”的,可是计算机只能听懂“01语言”。那其中是怎么转换的呢?JVM讲的就是这个。引入JVMjava语言到机器语言我们先来看一个java文件是怎么翻译为机器语言的。从上图中可以看出:我们编写出.java文件,经过编译器(javac)编译,生成.class文...原创 2019-01-22 14:03:01 · 1101 阅读 · 17 评论 -
【java面向对象】内存分析
情景导入今天小编来说说一个对象的基本初始化过程。以下面这个简单的例子为例,在这个例子中,Student类:成员变量:name,age成员方法:study,eatStudentTest类中:创建对象——输出成员变量的值,这里输出的是默认值——给成员变量赋值再次输出成员变量的值,输出的是赋值后的最后调用了方法执行结果:...原创 2018-09-19 15:14:33 · 605 阅读 · 23 评论