文档章节

jvm虚拟机结构

xpp_ba
 xpp_ba
发布于 09/17 23:14
字数 1407
阅读 9
收藏 0

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型推导出准确的类型

2:原始类型:数值类型,boolean类型,returnAddress类型 2-1:数值类型:整数类型,浮点类型 boolean类型: 值为true和false,默认为false returnAddress类型:指向一个操作码的指针(opCode),此操作码与jvm指令想对应,在jvm中只有returnAddress类型 在java语言数据类型中不相对

    2-2:在浮点数中,+0和-0是相等的,但对其操作会得出不同结果,任何数/+0会得到正无穷大,/-0会得到负无穷大,NAN是无序,无法用它和其
         数进行比较,全部返回false

    2-3:boolean类型在jvm中会用int数据代替表示,boolean数组会用byte数组代替表示

3:引用类型:类类型,数组类型,接口类型,数组类型最外面那一维元素的类型叫做数组类型的组件类型

4:运行时数据区: 1:pc寄存器:每一条线程都有自己的pc寄存器,一条jvm线程在任意时刻都只会执行一个方法被称为当前方法,如果当前方法 不是native,那么pc寄存器保存正在执行的指令的地址,如果是那么就是undefined,pc寄存器大小需要满足 returnAddress类型或平台相关的本地指针的值 2:jvm栈:栈与线程同时创建,存放栈帧(Frame),用于存放局部变量和尚未计算好的结果,另外与方法返回地址扮演了 重要的角色,除了入栈和出栈没有其他操作影响,所有栈可以在堆中分配,不需要连续分配,栈在创建时可以固定大小, 也可以动态扩容,如果分配的栈容量大于允许的最大栈容量,将抛出StackOverflowError,如果jvn栈动态扩展 超过堆允许的最大容量,将抛出OutOfMemoryError 3:jvm堆,虚拟机启动就创建,线程共享数据区域,被存放在自动内存管理系统中,这些对象无法显示的被销毁,只能通过gc自动回收 堆可以固定容量,也可以动态扩展,如果超过堆允许的最大容量,将抛出将抛出OutOfMemoryError 4:方法区:线程共享数据区域,存放类的结构信息,常量池,字段,方法数据,字节码内容,还包括类,接口,实例初始化的特殊方法 方法区可以在堆中分配,容量可以固定,也可以动态扩展,如果方法区内存不足,将抛出OutOfMemoryError

    5:运行时常量池:是class文件中每一个类和接口的常量池表的运行时表现形式,包含了若干种不同的常量,从编译期的数值类型
       到运行时的符号引用,类似传统语言中的符号表,不过比传统的符号表更为广泛,运行时常量池都是在方法区中分配

    6:本地方法栈

5:栈帧: 1:局部变量表:长度有编译期决定,并且存在类和接口的二进制文件中,通过方法的code属性保存及提供栈帧使用 1个局部变量表可以保存byte,char,int,boolean,reference,returnAddress等的数据,两个局部变量表 可以保存long,double的数据,局部变量由索引进行访问使用,long,double使用两个局部变量表,使用较小的索引来访问 jvm使用局部变量表完成参数传递,将从索引为0开始,如果是实例方法,0默认为this,后续参数从1开始递增

    2:操作数栈:当前操作的栈帧被称为操作数栈,栈帧在创建时,操作数栈是空,通过指令读取局部变量表的数据到入栈
       也可以通过指令出栈保存到局部变量中,在栈中数据与指令必须类型相对,如:iadd指令,需要两个int类型的数据,如果是long或者其他
       将出现错误,但有些指令并不关心数据的类型,即操作数栈入栈出栈数据类型与指令相关,操作数栈都有一栈深度,long,double都
       占用两个深度,其他数据类型占用一个深度

    3:动态链接:栈帧都有一个指向当前方法所在类的运行时常量池的引用,来实现动态链接,执行一个方法需要引用其他类的方法或字段,
        需要符号引用来表示,动态链接就是将符号引用解析成实际方法的引用,类加载过程中需要解析未解析的符号引用,并对变量的访问转化成
        变量在实例运行时位于存储结构中的正确偏移量。

© 著作权归作者所有

上一篇: centos7安装rabbitmq
下一篇: java线程
xpp_ba
粉丝 0
博文 30
码字总数 16298
作品 0
成都
程序员
私信 提问
Java虚拟机JVM内部体系结构

Java虚拟机JVM内部体系结构 易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。 JVM(Java虚拟机)是一个抽象...

LYQ1990
2018/07/18
274
0
JVM内存结构 VS Java内存模型 VS Java对象模型

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和...

Java架构
2018/07/11
0
0
好程序员Java分享JVM结构

  好程序员Java分享JVM结构,jvm的基本结构,也就是我们俗称概述。内容很多,而且概念量也很大,关于概念方面,让概念在你的脑子里变成图形,所以只要你有耐心、仔细,发挥自己的想象力,会...

好程序员IT
05/31
87
0
云计算高级培训,Tomcat运维JVM 虚拟机常识

云计算高级培训,Tomcat运维JVM 虚拟机常识,作为了解JVM 虚拟机的开始。我们很有必要弄明白以下问题。 所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大...

长沙千锋
2018/05/17
0
0
《深入Java虚拟机》——Java虚拟机读书笔记

1、Java虚拟机的生命周期 如果在同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。 在Java虚拟机内部有两种线程,守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,...

亭子happy
2014/04/11
141
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部