![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
JVM
学习中啊哈哈
这个作者很懒,什么都没留下…
展开
-
3.3、执行引擎
执行引擎概述虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。执行引擎作用JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字节码指令、符号表和其他辅助信息那么原创 2020-06-26 13:41:48 · 167 阅读 · 0 评论 -
3.2、直接内存
直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域,直接内存是Java堆外的、直接向系统申请的内存区间直接内存举例/** * IO NIO (New IO / Non-Blocking IO) * byte[] / char[] Buffer * Stream Channel * * 查看直接内存的占用与释放 */public class BufferTest { priv原创 2020-06-26 13:41:24 · 166 阅读 · 0 评论 -
3.1、对象实的实例化
对象的实例化创建对象的步骤类加载检查虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。为对象分配内存首先计算对象占用空间大小,接着在堆中划分一块内存给新对象。 如果实例成员变量是引用变量,仅分配引用变量空间即可,即4个字节原创 2020-06-26 13:40:59 · 159 阅读 · 0 评论 -
2.2.5、运行时数据区-方法区
方法区概述方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然 Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。所以,方法区可以看作是一块独立于Java堆的内存空间。堆、栈、方法区的交互关系对象的新建对象的使用方法区特点与Java堆一样,是各个线程共享的内存区域方法区在JVM启动时就会被创建,并且它的实际的物理原创 2020-06-24 14:56:11 · 221 阅读 · 0 评论 -
2.2.4、运行时数据区-堆
堆空间概述堆空间的特点实例分析堆的调用堆的内存结构JDK7 及以前JDK8 及以后永久代、元空间与堆的关系堆内存大小设置设置内存大小查看堆内存大小年轻代与老年代新生代与老年代在堆的占比配置堆内存的分配机制堆内存分配过程对象分配的特殊情况Minor GC、Major GC、Full GC 简介年轻代GC(Minor GC)触发机制老年代GC(Major GC/Full GC)触发机制Full GC触发机制内存分配策略总结TLA.原创 2020-06-24 14:55:28 · 159 阅读 · 0 评论 -
2.2.3、运行时数据区-本地方法栈和本地方法接口
本地方法接口和本地方法一个Native Method 是特殊的一个java方法:该方法的实现由非Java语言实现,比如C。简单来讲,Native Method就是一个java调用非java代码的接口,它的作用是融合不同的编程语言为java所用,初衷是融合C/C++程序。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去调用一个C的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java int原创 2020-06-24 14:54:56 · 204 阅读 · 0 评论 -
2.2.2运行时数据区-虚拟机栈
虚拟机栈的概述背景由于跨平台性的设计需要,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。栈结构的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。内存中的堆与栈栈管运行,即程序如何执行,或者说如何处理数据。栈空间存放基本数据类型的局部变量,以及引用数据类型的对象的引用堆管内存,即数据怎么放、放在哪儿。一般来讲,对象主要都是放在堆空间的,是运行时数据区比较大的一块虚拟机栈java虚拟机栈(Java Virtual M原创 2020-06-24 14:54:28 · 177 阅读 · 0 评论 -
2.2.1、运行时数据区-程序计数器
程序计数器(PC寄存器)程序计数器(Program Counter Register)中的Register,命名源于CPU的寄存器寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟程序计数器的作用PC寄存器是用来存储指向下一条指令的地址,也就是即将要执行的指令代码。由执行引擎读取下一条指令。特点它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域在jvm规范中,每个线程都有它自己的程序计数器,它是原创 2020-06-24 14:53:52 · 206 阅读 · 0 评论 -
2.1、JVM内存结构概览
内存与线程内存内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。JDK8的元数据区(就是JDK8以前的方法区)+JIT编译产物分区java虚拟机规定了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。线程独立区域:独原创 2020-06-24 14:53:21 · 103 阅读 · 0 评论 -
1.2、类加载器
类加载器ClassLoader角色所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的 loadClass() 方法)。数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。类加载器分类JVM支持两种类型的加载器引导类加载器(BootStrap ClassLoader)自定义类加载器(User-Defin原创 2020-06-24 14:52:48 · 144 阅读 · 0 评论 -
1.1、类的加载过程
类加载子系统 概览类加载器的作用在JVM架构中的具体位置类加载的过程类的生命周期1. 加载2. 连接.验证3. 连接.准备4. 连接.解析5. 初始化类的卸载类加载子系统 概览类加载器的作用类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识;ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,.原创 2020-06-24 14:47:14 · 193 阅读 · 0 评论 -
1.0、JVM概览
Java 虚拟机简介JVM的位置JVM 的整体结构Java 代码执行流程JVM 架构模型JVM 声明周期启动执行退出各类 JVM 的实现SUN Classic VMExact VMHotSpot VMJRockitIBM J9KVM & CDC/CLDC HotspotAzul VM & BEA Liquid VMApache HarmonyMicrosoft JVMTaobaoJVMDalvik VMGraal VMJava.原创 2020-06-24 14:46:03 · 130 阅读 · 0 评论