
JVM
文章平均质量分 79
小李子还挺酸
突飞猛进往往是自然发生的。你在某个夜晚苦熬一个知识点时,不会觉得自己突飞猛进;只有在多年后某日熟练地给别人讲解这个知识点后,内心才会小小地波动一下,猛然忆起当年深夜中的青灯一盏。
展开
-
【JVM】9、方法区
文章目录1、栈、堆、方法区的交互关系2、方法区的理解3、设置方法区大小和OOM4、方法区的内部结构5、方法区使用举例6、方法区的演进细节7、方法区的垃圾回收8、总结 1、栈、堆、方法区的交互关系 运行时数据区结构图 栈、堆、方法区的交互关系 将Person类的结构信息加载进方法区 person是一个变量,表示堆空间对象实体的引用,保存在栈中,再具体点就是保存在某一栈帧中的局部变量表中 而new Person()创建的对象实体保存在堆中 2、方法区的理解 方法区在哪里? 《Java虚拟机规范》中明确原创 2021-11-26 15:29:59 · 991 阅读 · 0 评论 -
【JVM】8、堆
文章目录1、堆的核心概述2、设置堆内存大小与OOM3、年轻代和老年代4、图解对象分配过程5、Minor GC、Major GC、Full GC6、堆空间分代思想7、内存分配策略8、为对象分配内存:TLAB9、小结堆空间的参数设置10、堆是分配对象的唯一选择吗 1、堆的核心概述 一个JVM实例只存在一个堆内存,并且 Java的堆区在JVM启动时(即程序开始运行)大小就确定了。如果想要调整堆区大小,可以在运行前设置其参数 如在配置文件中这么设置: 堆可以在物理上不连续的内存空间中,但是逻辑上应该视为连续原创 2021-11-20 18:16:49 · 1028 阅读 · 0 评论 -
【JVM】7、本地方法栈
Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用 本地方法栈和虚拟机栈一样,都是线程私有的 允许固定分配内存大小或者动态扩展内存大小(同Java虚拟机栈) 如果线程请求分配的栈容量超过了本地方法栈所允许的最大容量,那么就会产生 StackOverflowError 异常 如果本地方法栈可以动态扩展,那么在动态扩展时发现无法申请到足够的内存,或者在创建新线程时没有足够的内存去创建对应的本地方法栈,那么就会产生 OutOfMemoryError 异常 本地方法是..原创 2021-11-18 16:03:58 · 775 阅读 · 0 评论 -
【JVM】6、本地方法接口
文章目录1、什么是本地方法2、为什么要使用native method2.1 与Java环境外交换2.2 与操作系统交互2.3 Sun's Java 1、什么是本地方法 native method 就是一个 Java 调用非 Java 代码的接口, 该方法的实现由非Java 语言实现 ,主要是为Java服务 在定义一个native method 时,并不提供实现体,因为其实现体是由非Java语言在外面实现的 2、为什么要使用native method 2.1 与Java环境外交换 需要和Java外面的环境进行原创 2021-11-18 12:16:00 · 649 阅读 · 0 评论 -
【JVM】5、虚拟机栈
文章目录区分栈的指令集架构和寄存器的指令集架构 宋红康JVM教程 区分栈的指令集架构和寄存器的指令集架构 Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构 两种架构的区别: (1)基于栈的指令集架构的特点 设计和实现更简单,适用于资源受限的系统 避开了寄存器的分配难题:使用零地址指令方式分配 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现 不需要硬件支持,可移植性更好,更好实现跨平台 (2)基于寄存器架构的特点原创 2021-11-18 11:06:12 · 1526 阅读 · 0 评论 -
【JVM】4、程序计数器
文章目录程序计数器概述1、PC Register介绍2、举例说明3、两个常见问题3.1为什么使用PC寄存器记录当前线程的执行地址呢3.2 PC寄存器为什么被设定为线程私有 程序计数器概述 1、PC Register介绍 介绍: PC寄存器是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域 在JVM规范中,每个线程都有自己的程序计数器(PC寄存器),是线程私有的,生命周期与线程的生命周期一致 任何时间一个线程都只有一个方法在执行,即所谓的当前方法。程序计数器会存储当前线程正在执行的原创 2021-11-17 20:42:31 · 362 阅读 · 0 评论 -
【JVM】3、运行时数据区概述及线程
文章目录1 运行时数据区内部结构运行时数据区与内存2 JVM中的线程说明JVM系统线程 1 运行时数据区内部结构 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们的运行时数据区 运行时数据区与内存 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的原创 2021-11-17 20:40:30 · 617 阅读 · 0 评论 -
【JVM】2、类加载器子系统
文章目录1 区分栈的指令集架构和寄存器的指令集架构2 概述类的加载器及类加载过程3 类的加载过程一:Loading4 类的加载过程二:Linking5 类的加载过程三:Initialization6 类的加载器的使用7 引导类、扩展类、系统类加载器的使用8 为什么需要用户自定义类加载器及具体实现9 ClassLoader的常用方法和获取方法10 双亲委派机制11 双亲委派机制的优势12 沙箱安全机制13 其他两个class对象是否为同一个对类加载器的引用类的主动使用和被动使用 1 区分栈的指令集架构和寄存器原创 2021-11-17 20:36:44 · 749 阅读 · 0 评论