文档章节

Java虚拟机结构学习

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

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

snailclimb ⋅ 05/12 ⋅ 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

深入理解Java虚拟机的体系结构

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

java进阶 ⋅ 昨天 ⋅ 0

Android JNI(一)——NDK与JNI基础

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头 ⋅ 05/09 ⋅ 0

培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

云计算高级培训,Tomcat运维JVM 虚拟机常识

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

长沙千锋 ⋅ 05/17 ⋅ 0

Java虚拟机标准(第10版)第一章(节选)翻译与评注

英文原文链接:https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-1.html 评注是括在鱼尾号之间的文字,其余均为翻译 Java虚拟机是Java平台的基石,这种技术实现了诸如跨平台、生成...

Jelif ⋅ 06/03 ⋅ 0

java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

《成神之路-基础篇》JVM——JVM内存结构(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是《成神之路系列文章》的第一篇,主要是关于JVM的一些介绍。 持续更新中 参考文章: Java虚拟机的内存组成以及堆内存介绍 Java堆和栈...

⋅ 05/05 ⋅ 0

Java开发学习之三版本简介 java编程

  Java编程语言,在更迭迅速的互联网领域多年屹立不倒,足以得见Java这门语言旺盛的生命力,因此,会有很多想要进入互联网领域的朋友,想要学Java来转行开发。但是,所谓“隔行如隔山”,j...

老男孩Linux培训 ⋅ 06/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 14分钟前 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部