文档章节

Java虚拟机结构学习

laohng1995
 laohng1995
发布于 2017/02/26 16:15
字数 1365
阅读 11
收藏 0

1.数据类型:原始数据类型和引用数据类型

     1.1原始数据类型和值:

            Java虚拟机所支持的数据类型为数值类型,boolean类型,returnAddress类型。数值类型又分为整数和浮点数类型。整数类型包括:byte类型 8位有符号的二进制补码整数,默认值为0;short类型 16位有符号的二进制补码整数,默认值为0  int类型 32位有符号的二进制补码整数,默认值为0;long类型 64位有符号的二进制补码整数,默认值为0;char类型:16位无符号整数表示;float类型:单精度浮点整数集合;double类型是多精度浮点整数集合。    boolean类型:Java虚拟机中对boolean类型提供支持非常优有限,Java编译器把Java语言中的boolean类型值映射为int行的true=1,flase=0

     1.2引用数据类型和值:

         Java虚拟机中有三种引用类型:类类型。数组类型和接口类型。引用类型的值中有一个特殊的值是null,代表当前引用不指向任何一个对象

2.运行时数据区:

1.pc寄存器:Java虚拟机支持多线程同时执行,每一条Java虚拟机线程都会有自己的pc寄存器。pc寄存器是线程私有的。pc寄存器是用来记录字节码的行号。如果方法不是native的,那么pc寄存器保存Java虚拟机正在执行的字节码指令的地址,如果是native,则pc寄存器的值为undefined。Java虚拟机多线程是通过轮转切换分配处理器执行时间来实现的。当轮转到本线程时候,pc寄存器记录的行号开始执行。

2.Java虚拟机栈

Java虚拟机栈的作用与传统c语言的栈类似,用于存储局部变量还有一些未算好的解决。Java虚拟机栈是属于隔离线程部分,也就是线程私有,他的生命周期与线程的生命周期相同。他主要可分为:局部变量区、运行环境区、操作数区。Java虚拟机栈的结束方式主要用调用System.exit(),程序结束,或者出现问题和系统推出。局部变量区存储着各种基本数据类型(boolean,byte,shot,int,float,double)和引用类型(refrence)但是他不是对象本身,而是对象的起始地址的引用指针,也可能代表句柄或者和其他对象相关的地址,其中float,double类型是暂用两个局部内存空间。

3.Java堆:

堆是可供各个线程共享的内存区域,也是可供所有类实力和数组对象分配内存区域。Java堆在虚拟机启动的时候就被创建,他储存了垃圾收集器所管理的各种对象。堆中的垃圾收集器收集的方法有很多中。也有许多步骤。

首先我们要确定对象是否已经死亡。一般而言确定的方法有两种,第一种是引用记数法,基本原理是,在对象创建的时候伴随创建一个引用记数器,每一次引用对象给计数器加1,释放对象则减一,如果引用计数器为0的时候代表可以回收,据说python中的对象则使用这种方法标记,而Java中的标记则使用根搜索算法,

类如上图中(图片引用:http://www.cnblogs.com/gw811/archive/2012/10/19/2730258.html)

与GC Roots链接的object为不删除对象,未连接的标记删除。

早期的回收算法为:标记清除算法,顾名思义就是用搜索算法标记的需要被清除对象,在清除阶段进行清除。复制算法:用内存按容量分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了,就将还存活着的对象复制到另外一块内存上面,然后再把已使用过的内存空间一次清理掉。标记整理算法:该算法标记的过程与标记—清除算法中的标记过程一样,但对标记后出的垃圾对象的处理情况有所不同,它不是直接对可回收对象进行清理,而是让所有的对象都向一端移动,然后直接清理掉端边界以外的内存。

 

4 方法区:可供各线程共享的运行时内存区域。是堆的逻辑组成部分,但是不进行垃圾回收。方法区用于存储被记录虚拟机加载的类信息,常量,静态变量等数据。

 

5.本地方法栈:本地方法栈和虚拟机栈的作用非常相似,区别在于Java虚拟机栈为Java方法提供服务,而本地方法栈伟Native提供服务。Native的调用主要是方法中一些不有Java语音代码琐屑的,还有Java语言

5.直接内存:直接内存并不是虚拟机运行数据区中的一部分。但是在jdk1.4中新加入Nio类的时候引入一种基于管道与缓冲区的I/O联系方式。

 

© 著作权归作者所有

共有 人打赏支持
laohng1995
粉丝 12
博文 37
码字总数 30590
作品 0
杭州
程序员
私信 提问
JVM内存结构 VS Java内存模型 VS Java对象模型

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

Java架构
07/11
0
0
面试中关于Java虚拟机(jvm)的问题看这篇就够了

最近看书的过程中整理了一些面试题,面试题以及答案都在我的文章中有所提到,希望你能在以问题为导向的过程中掌握虚拟机的核心知识。面试毕竟是面试,核心知识我们还是要掌握的,加油~~~ 下面...

snailclimb
05/12
0
0
[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱?

[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱? 曾经的我经常害怕处理与JVM相关的异常,对JVM的配置参数也一无所知,那时候我天真地认为,JVM的出现本身就是想让程序员屏蔽实现细节,...

原创小博客
07/19
0
0
JVM系列第12讲:JVM参数之查看JVM参数

今天要说的是如何查看 JVM 中已经设置的参数,包括显示参数和隐式参数。 打印显式参数 -XX:+PrintVMOptions 该参数表示程序运行时,打印虚拟机接受到的命令行显式参数。我们用下面的命令运行...

陈树义
12/10
0
0
JVM 虚拟机(对象创建,类加载器,执行引擎等),

1.揭开 Java 对象创建的奥秘? 2.class 文件结构详解? 3.详解 Java 类的加载过程? > Java 对象创建,class 文件结构 Java对象模型 。Java对象保存在堆内存中。在内存中,一个Java对象包含三...

desaco
08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

fabric增删改查Mac

备份1.3版本,重新下载1.1版本到fabric文件夹 /opt/gopath/src/github.com/hyperledger/fabric -> /opt/gopath/src/github.com/hyperledger/fabric1.3 新建/opt/gopath/src/github.com/hype......

八戒八戒八戒
22分钟前
2
0
盘点愚人节各大网站彩蛋,谁最爱恶搞?

如今的愚人节俨然已是各品牌宣传了一个重要节日,同时,也成为了各大互联网科技企业凑热闹,比拼创意和策划的节日。跟小编一起看看有哪些有趣的策划吧! Google地图变成吃豆人游戏 每年愚人节...

临江仙卜算子
46分钟前
3
0
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识,文中不会对这些知识进行介绍。Java8 用到了红黑树...

java菜分享
47分钟前
3
0
玩手机与做实验

看过这样一个故事:说的是在二十世纪二十年代初的一个深夜,担任英国剑桥大学卡文迪许实验室主任的卢瑟福来实验室检查,发现一位学生还在做实验。卢瑟福就问他:“你上午做什么了?”学生回答...

Bob2100
今天
5
0
Kafka流式处理

Kafka Streams 初识流式处理 什么是数据流 数据流(也叫事件流)是无边界数据集的抽象表示。无边界意味着无限和持续增长。无边界数据集之所以是无限的,是因为随着时间的推移,新记录会不断加...

东都大狼狗
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部