
jvm攀登之路
深入学习JVM相关知识,从入门到慢慢理解
落木萧潇
这个作者很懒,什么都没留下…
展开
-
引子、jvm攀登系列概述
终于决定要把JVM系列整体过一遍以加深自己对JVM的理解,在B站找到了尚硅谷宋红康老师的JVM系列的视频,历时将近两个月总算是把上篇看完了,在本子和Typora上做了一些笔记,简单把笔记整理一下上传到博客,算是对自己的一个交代。视频链接:https://www.bilibili.com/video/BV1PJ411n7xZ?from=search&seid=7481392023116247275 妥妥的给大佬点赞三连,感谢老师。参考链接:https://blog.youkuaiyun.com/on.原创 2021-02-02 22:56:37 · 119 阅读 · 0 评论 -
八、堆
堆概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应原创 2021-03-09 23:45:49 · 126 阅读 · 0 评论 -
七、本地方法栈
本地方法栈用于管理本地方法的调用、线程私有、允许被实现成固定或者是可动态扩展的内存大小;本地方法一般是使用C语言实现的。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限。本地方法可以通过本地方法接口来访问虚拟机内部的运行时数据区它甚至可以直接使用本地处理器中的寄存器直接从本地内存的堆中分配任意数量的内存并不是所有的JVM都支持本地方法。因为Java虚拟机规范并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构等。如果JVM产品不.原创 2021-02-17 22:48:08 · 106 阅读 · 0 评论 -
六、本地方法接口
本地方法一个Native Method是一个Java调用非Java代码的接囗;Native Method方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implementation is provided by non-java code.”(本地方法是一个非Java的方法,它的具体实现是非Jav原创 2021-02-11 23:36:53 · 135 阅读 · 0 评论 -
五、虚拟机栈
虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的;优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放哪里每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,栈是线程私有的;它的生原创 2021-02-10 23:43:10 · 126 阅读 · 0 评论 -
四、程序计数器
PC寄存器特点PC寄存器用来存储指令相关的现场信息,它区别于广义上的物理寄存器,可以看作是物理PC寄存器的一种抽象模拟。在jvm内存模型中,它运行速度最快;线程私有,并且生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址。不会出现 OOM 异常。PC寄存器用来存储指向下一条指令的地址,执行引擎会从寄存器中取到指令并执行。面试题PC寄存器存储字节码指令地址的作用是因为线程是顺序执行流,原创 2021-02-02 23:29:12 · 152 阅读 · 0 评论 -
三、运行时数据区概述及线程
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。运行时数据区的完整结构图Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区:其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。线程独有:独立包括程序计数器、栈、本地方法栈线程间共享:堆、堆外..原创 2021-02-01 23:00:57 · 122 阅读 · 0 评论 -
二、类加载子系统
类加载子系统类的加载过程的完整结构框图类加载子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。且只负责加载,是否可以运行,由执行引擎来决定(Execution Engine),加载的类信息可以存放于方法区。class文件 --> Java.lang.Class --> 多个具体实例。类的加载过程加载流程:通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构原创 2021-01-27 23:22:00 · 140 阅读 · 0 评论 -
一、JVM 整体概述
JVM 整体概述垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。Java的跨平台性每个语言都需要转换成字节码文件,最后转换的字节码文件都能通过Java虚拟机进行运行和处理随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。Java虚拟机根本不关心运行在其内部原创 2021-01-25 23:52:46 · 132 阅读 · 0 评论