
JVM学习
文章平均质量分 91
详细笔记
oo于野
这个作者很懒,什么都没留下…
展开
-
JVM 类加载、堆、栈等
snkstart@126.com 1.类加载子系统 1.类加载子系统作用 类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识; ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 1.1类加载器ClassLoader角色原创 2020-08-27 11:01:11 · 791 阅读 · 0 评论 -
JVM_08 执行引擎(Execution Engine)
执行引擎概述 执行引擎是Java虚拟机的核心组成部分之一 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。 JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字节码原创 2020-08-27 10:50:03 · 314 阅读 · 0 评论 -
JVM_07 运行时数据区4-对象的实例化内存布局与访问定位+直接内存
1.对象的实例化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TIfLaKs0-1598496508127)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597995919901.png)] 1.2 创建对象的步骤 六种创建对象的方式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5pzaDkwn-1598496508130)(C:\Users\Admin原创 2020-08-27 10:48:46 · 173 阅读 · 0 评论 -
JVM_06 运行时数据区3-方法区
1. 堆、栈、方法区的交互关系 运行时数据区结构图 堆、栈、方法区的交互关系 2. 方法区的理解 《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。’但对于HotSpotJVM而言,方法区还有一个别名叫做Non-heap(非堆),目的就是要和堆分开。 所以,方法区可以看作是一块独立于Java堆的内存空间。 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域 方法区在JVM启动时就会被创建,并且原创 2020-08-20 18:28:48 · 166 阅读 · 0 评论 -
JVM_05 运行时数据区2-堆
1.核心概述 一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。 一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的) 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的 所有的线程共享java堆,在这里还可以划分线程私有的缓冲区(TLAB:Thr原创 2020-08-20 18:27:54 · 173 阅读 · 0 评论 -
JVM_12 垃圾回收3-垃圾回收器
GC的分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 按线程数分,可以分为串行垃圾回收器和并行垃圾回收器 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。 ➢在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场 合,串行回收器的性能表现可以原创 2020-08-18 11:46:17 · 301 阅读 · 0 评论 -
JVM_11 垃圾回收相关概念
System.gc()的理解 在默认情况下,通过System.gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保证马上触发GC)。 JVM实现者可以通过system.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个原创 2020-08-18 11:45:36 · 189 阅读 · 0 评论 -
JVM_10 垃圾回收1-概述+相关算法
1.概述 什么是垃圾 Java = (C++)– 什么是垃圾( Garbage) 呢? ➢垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 ➢外文: An object is considered garbage when it can no longer be reached from any pointer in the runningprogram. 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空 间会一直保留到应用程序结束,被保留的空间无法被其他对象使原创 2020-08-18 11:45:06 · 472 阅读 · 0 评论 -
JVM_08 执行引擎(Execution Engine)
执行引擎概述 执行引擎是Java虚拟机的核心组成部分之一 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。 JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字节码原创 2020-08-18 11:46:47 · 181 阅读 · 0 评论 -
JVM_03.程序计数器+虚拟机栈+本地方法栈详解
内存与线程 01 内存 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区) (图源阿里)JDK8的元数据区+JIT编译产物 就是JDK8以前的方法区 02 分区介绍 java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁原创 2020-08-18 11:47:20 · 825 阅读 · 0 评论 -
JVM_02.类加载子系统作用
1.类加载子系统作用 类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识; ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 1.1类加载器ClassLoader角色 1.2加载 通过一个类的全限定明获取定义此类的原创 2020-08-17 18:18:58 · 381 阅读 · 0 评论