java虚拟机概览

一、java虚拟机概览



说明:
1、程序计数器:是内存一块小的区域,是当前线程所执行字节码的行指示器;每个线程都有独立的程序计数器,互不影响是,是线程私有的;
2、java虚拟机栈:它的生命周期与线程相同,是描述java方法执行的内存模型,java虚拟机栈也叫作局部变量表;每个方法执行时,都会创建一个栈帧,用于存储局部变量表
操作栈,动态链接、方法出口等信息,每个方法从开始到执行完毕,就相当于入栈、出栈的过程;
局部变量表:各种基本数据类型(boolean,byte、char、short、int、float、long、double),对象引用(reference类型),局部变量表所需的空间是在编译器完成的,在运行期不会改变局部变量表的大小;
异常类型:StackOverflowError和OutOfMemory,StackOverflowError:当线程请求栈的深度大于虚拟机所允许的深度时,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存时,就会抛出OutOfMemoryError
3、本地方法栈:本地方法栈和java虚拟机栈类型,区别则是为虚拟机使用到的native方法服务的;
异常类型:本地方法栈抛出的异常类型和java虚拟机栈相同:StackOverflowError和OutOfMemory,StackOverflowError。
4、方法区(method area):方法区和堆一样,是线程共享的, 用于存放已被虚拟机加载的类信息,常量,静态变量,即编译后的代码等数据,虽然虚拟机把方法区作为java堆的一部分,但是它确有另外一个别名,即非堆(NON-HEAP),目的是和堆区分开来。
异常类型:当方法区无法满足内存分配时,会抛出OutOfMemoryError异常;
5、java堆:是java虚拟机管理内存的最大一部分,是线程共享的一个区域;在虚拟机启动时,它的唯一目的就是存放实例对象及相关数组;java堆是内存回收的主要区域,java堆可以是物理上不连续的堆存空间,但在逻辑上必须是连续的,这点和我们磁盘有点类似;这块内存区域是可以扩展的,也可以设置成固定大小,是通过参数(-Xmx和-Xms控制)
异常类型:OutOfMemoryError,当对象或数组在堆中没有完成内存分配时,并且堆也是无法扩展时,此时会报OutOfMemory异常;
堆空间细分:堆可以新生代和老年代,再细分可以分为Eden区、From Survivor区,To  Survivor ,这样做的目的其实是便于内存管理和内存回收。
总结:线程私有的内存区域有:程序计数器,

二、java虚拟机的对象分配

这里说的对象是指普通的java对象,不包括数组和Class对象,按照对象的生命周期来说,无非经历这么几步:创建、使用,回收;先看看对象的创建:
1、 对象的创建:当虚拟机遇到new时,首先会检这个指令的参数是否能在常量池中定位到另一个类的符号引用,这个类的符号引用就是类的加载、解析和初始化工作;古国不存在,那么必须执行类的加载;
2、 类的加载通过后,那么首先接下来虚拟机就为新对象分配内存,对象所需要的内存大小在加载类完成后就完全确定了,java内存的分配一般使用指针碰撞和空闲列表方法,具体采用哪一种方法需要根据java内存是否规整和使用的垃圾收集器是否带有压缩功能决定的,假设内存是规整的,指针碰撞就是虚拟机把使用过的内存放在一边,没有使用过的内存放在另一边,中间使用指针作为分界点的指示器,对象的分配内存就是把这个指针向空闲内存那边移动一段与对象大小相等的距离,这种方式叫指针碰撞(bump the pointer);如果java内存不是规整的,就无法使用指针碰撞方法了,此时虚拟机内维护一个列表,这个列表记录了内存的使用情况,在分配对象的时候,就从列表中找到一块足够大的空间划分给对象实例,然后在更新这个内存列表;这种分配方式叫做空闲列表方法(Free  list)。虚拟机使用serial 和parnew等带有压缩功能时候,分配内存的方式是指针碰撞,使用cms这种基于mark-sweep收集器使用的空闲列表方法;其次,java的内存分配是非常频繁的,即使是移动指针也不够的,还有并发的情况呢,解决这种问题有两种办法:一种是cas(compare and swap)和失败重试的方式保证更新操作的原子性,另外一种就是按照线程划分在不同的空间中分配,也就是说每个线程在java堆中预分配一块内存,这块内存叫(Thread Local Allocation Buffer)本地线程分配缓冲区,简称TLAB,例如:线程A需要分配内存,那么就在线程A的TLAB上分配,当A的TLAB用完后,需要同步锁定。虚拟机是否需要TLAB,需要通过参数来设定,-XX:UseTLAB,;当所有的内存分配完成之后,虚拟机需要将分配的内存初始化为0,这一步也就是java变量在不赋值时可以直接使用的原因,例如:int a;那么a的值为0;此时从虚拟机的角度来说,一个新的对象就产生了,但是从java程序的角度来说,还差点事吧,这种对象也是无法程序员的意愿来工作的,因此必须初始化才算完整,一般对象创建new后,会执行init方法进行初始工作;
3、 对象的内存布局:对象在存储布局中分为3块:对象头(Header)、实例数据(Instance data)、对其填充(Padding),对象头包含的信息:哈希码、gc分代年龄、锁状态标志、时间戳和类型指针,类型指针说白了就是对象指向它的类元数据指针,虚拟机就是通过这个来确定这个对象是哪个类的实例;实例数据(Instance data)才是对象真正存储的对程序员来说的有效信息,就是咱们在程序中定义的变量内容,这个变量内容无论是从父类继承过来,还是自身定义的,都需要记录下来,记录顺序受到虚拟机的分配策略和字段在源码中的位置有关,相同宽度的字段总是被分配到一起,在满足这个条件下,在父类中定义的变量会出现子类之前;对其填充主要是起到占位符的作用;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值