文档章节

Java虚拟机结构学习

laohng1995
 laohng1995
发布于 2017/02/26 16:15
字数 1365
阅读 9
收藏 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
粉丝 10
博文 34
码字总数 28594
作品 0
南岸
程序员
面试中关于Java虚拟机(jvm)的问题看这篇就够了

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

snailclimb
05/12
0
0
JVM内存结构 VS Java内存模型 VS Java对象模型

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

Java架构
07/11
0
0
[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱?

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

原创小博客
07/19
0
0
深入理解Java虚拟机的体系结构

JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果...

java进阶
06/22
0
0
深入理解JVM学习笔记(一、总览)

1、JVM历史 2、JVM内存结构 3、JVM垃圾回收机制 4、JVM性能监控工具 5、JVM性能调优案例时间 6、JVM类文件结构 7、JVM类加载机制 8、JVM字节码执行引擎 9、JVM虚拟机编译及其运行时优化 10、...

jintaohahahaha
05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

弹性工作制的魔咒

简评:你找到了一份完美的工作 —— 可以提前离开公司,还可以在晚上从家里回复邮件。既然如此,你为什么还会有那么强的负罪感呢? 或许是弹性工作制魔咒在作祟。 很多享受弹性工作制的人会始...

极光推送
6分钟前
0
0
KAFKA介绍(分布式架构)

Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以...

明理萝
12分钟前
0
1
os::NodeHandle::subscribe回调函数绑定对象

void Foo::callback(const std_msgs::Empty::ConstPtr& message){}Foo foo_object;ros::Subscriber sub = handle.subscribe("my_topic", 1, &Foo::callback, &foo_object); 参考: ht......

itfanr
13分钟前
0
0
React16.4 开发简书项目 从零基础入门到实战

React16.4 开发简书项目 从零基础入门到实战 关注我的订阅号下载 React16.4 开发简书项目 从零基础入门到实战

蜗牛奔跑
16分钟前
0
0
day57-20180815-流利阅读笔记-待学习

社恐怎么办?这个漫画或许能治愈你 毛西 2018-08-15 1.今日导读 近日,芬兰漫画家卡罗利娜·科尔霍宁创作的绘本《芬兰人的噩梦》在中国大火。一时间书中的主人公马蒂成为了人们茶余饭后热议的...

aibinxiao
20分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部