![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
jvm
鹜 骜
我不去想,是否能够成功 ,既然选择了远方 ,便只顾风雨兼程。
展开
-
[JVM]四 执行引擎
文章目录执行引擎编译 & 执行为什么说java是半编译半解释:什么时候选择JIT热点探测回边计数执行方式JIT分类执行引擎虚拟机的执行引擎是由软件实现,因此可以不受物理条件制约的定制指令与执行引擎的体系结构,能够执行那些不被硬件支持的指令集格式jvm主要任务是负责装载字节码到内部,但字节码并不能直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,他内部包含的仅仅只是一些能够被JVM所识别的字节码指令,符号等,如果要想让一个java程序运行起来。执行引擎的任务就是将字节码指令解释编译为原创 2020-05-30 16:46:15 · 260 阅读 · 0 评论 -
[JVM]五 对象在内存中的结构
对象实例化创建对象的方式:1)new ,静态方法创建 , 工厂模式的静态方法创建2)class的newInstance() 反射,只能调用空参的构造器,权限必须是public (过时)3)Constructor的newInstance() 反射,可带参,无权限要求4)使用clone() 实现Cloneable接口 浅复制5)反序列化,从文件或网络中创建对象6)第三方库Objenesis对象创建的步骤1)判断对象对那个的类是否加载,链接,初始化虚拟机首先检查这个指令的参数能否在Metas原创 2020-05-28 23:55:05 · 218 阅读 · 0 评论 -
[JVM]二 运行时数据区 (5) 方法区 + 直接内存
方法区栈,堆,方法区的交互关系方法区的理解方法区大小与OOM方法区内部结构方法区的垃圾回收原创 2020-05-27 23:18:44 · 356 阅读 · 0 评论 -
[JVM]二 运行时数据区 (4) 堆
文章目录堆1 堆结构2.对象分配过程3.GC最后$.1 设置堆内存大小 & 查看堆内存$.2 显示GC信息$.3 参数调优堆概述一个JVM实例只存在一个堆内存,堆也是java内存管理的核心区域Java堆在启动时空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存大小可以调节。堆在物理上的内存中不连续,但在逻辑上应该被视为是连续的。所有的线程共享java堆,但堆里还可以划分线程私有的缓冲区几乎(【逃逸分析】,如果没有逃逸会由栈上分配)所有对象实例和数组都应该在运行时分分配在堆上栈原创 2020-05-25 00:35:50 · 252 阅读 · 0 评论 -
[JVM]二 运行时数据区 (3) 本地方法栈
jvm本地方法栈用于管理本地方法的调用本地方法栈也是线程私有的允许线程固定或者可动态扩展的内存大小某个线程调用一个本地方法时,他就进入了一个不受虚拟机限制的世界,他和虚拟机拥有同样的权限。具体实现:本地方法本质上是依赖于实现的,任何本地方法接口都会使用某种本地方法栈,当线程调用java方法时,虚拟机会创建一个新的栈帧并压入java栈。然而当他调用的是本地方法时,虚拟机会保持java栈不变,不再在线程的java栈中压入新的帧,虚拟机只是简单的动态链接并直接调用指定的本地方法,可以把这块安佐世虚拟机利用原创 2020-05-23 16:23:51 · 211 阅读 · 0 评论 -
[JVM]三 本地方法库 & 本地方法接口
文章目录本地方法为什么使用本地方法本地方法native(本地的)比如 Object中的 getClass()Thread类中 currentThread()一个Native Method 就是一个java调用非java代码的接口。该方法的实现由非java语言实现,比如C 。定义一个native method时,并不提供实现体,因为由非java实现。本地接口的作用是融合不同的编程语言为java所用。为什么使用本地方法与java环境外交互有时java应用需要与java外面的环境交互,这是本原创 2020-05-23 15:24:23 · 976 阅读 · 0 评论 -
[JVM]二 运行时数据区 (2) 虚拟机栈
虚拟机栈虚拟机栈栈是运行时的单位。解决程序的运行问题,即程序如何执行。主管java程序的运行,它保存方法的局部变量,部分结果,并参与方法的调用和返回每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的java方法调用,生命周期和线程一致;栈运行原理栈中的数据以栈帧的格式存在,线程上执行的每一个方法都对应一个栈帧,栈帧是一个内存区块,维系着方法执行过程中的各种数据信息。栈顶栈帧是当前正在执行的方法,也被称作栈顶栈帧,对应当前栈帧的方法就是当前方法,定义这个方法的类就是当前类原创 2020-05-23 13:21:18 · 238 阅读 · 0 评论 -
[JVM]二 运行时数据区 (1) 程序计数器
运行时数据区概述方法区(JKD8后元数据区)和堆是一个进程共享一份而每个线程对应一个程序计数器,虚拟机栈,本地方法栈程序计数器(PC寄存器)寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行JVM中的pc寄存器是堆物理pc寄存器的一种抽象模拟**作用:**存储指向下一条指令的地址,即将要执行的指令代码,由执行引擎读取吓一条指令。1)他的内存空间很小,但运行速度很快;2)在JVM规范中,每个线程都有自己的程序计数器,生命周期与线程的生命周期一致;3)任何时间一个线程都有原创 2020-05-21 23:49:03 · 196 阅读 · 1 评论 -
[JVM]一 类加载器子系统
类加载器子系统的作用:类加载器子系统负责从文件或网络中加载Class文件,class文件在文件开头由特定的文件标示ClassLoader负责class文件的加载,至于是否可以运行,则由ExecutionEngine决定加载的类信息存防御方法去的内存空间,处理类的信息外,方法去中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)具体步骤:加载:通过一个类的全限定名获取定义此类的二进制字节流,将这个字节流所代表的静态存储就够转化为方法区原创 2020-05-19 21:40:32 · 158 阅读 · 0 评论