游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

不是大佬教你学Java虚拟机内存管理线程JIT,你就不打算学

  内存管理
  内存管理也称为垃圾回收(GarbageCollection),指的是虚拟机在应用程序运行时管理应用程序使用的内存。Java代码中只需要分配内存而不需要考虑释放内存,内存释放的工作交由虚拟机处理。虚拟机在内存管理中通常要做以下4方面的事情。
  1)分配(Allocate):从OS请求内存,虚拟机需要考虑何时请求内存,请求内存的粒度。
  2)使用(Use):针对应用程序的请求,设计连续内存或者非连续内存的管理,为应用程序提供高速内存分配。
  3)回收(Recycle):当虚拟机管理的内存都被使用时,需要识别内存中的活跃对象,对活跃对象保留或者对非活跃对象释放,完成非活跃对象占用内存的回收,并将回收后的内存重新用于应用程序的分配。
  4)释放(Free):向OS归还内存,虚拟机需要考虑何时释放内存,释放内存的粒度等。
  不是所有的虚拟机都包含分配和释放这两个步骤,主要原因是虚拟机在实现时可以借助一些内存管理库来代替自己提供这些功能。
  另外,需要指出的是,这里所说的使用和回收是大家常提到的分配和回收。本节使用分配和使用来区别虚拟机向OS请求内存及应用程序向虚拟机请求内存。为了保持阅读的一致性,后文统一使用分配和回收替代此处的使用和回收。
  然而设计和实现一款垃圾回收器并不容易,不同的应用场景对于垃圾回收的诉求也不相同。一款垃圾回收器主要从以下几个方面衡量。
  1)吞吐量:指的是在一段时间内回收的内存量。吞吐量越大说明垃圾回收器的效率越高。
  2)停顿时间:指的是垃圾回收器在垃圾回收过程中可能会要求应用暂停以配合垃圾回收的工作。停顿时间越长,则说明垃圾回收器对应用的影响越大,停顿时间越短,说明垃圾回收器对应用的影响越小。
  3)数据访问的局部性:垃圾回收器在进行垃圾回收时可能会调整内存中活跃对象的位置,当对象的位置发生变化后会影响应用访问内存的速度,从而影响应用程序执行的效率。
  4)额外资源消耗:垃圾回收器实现时都需要额外的内存管理其内部数据结果。不同的垃圾回收器采用的算法不同,使用的数据结果也不同,占用的额外资源也不同。通常来说,额外资源消耗越少,说明垃圾回收器越优秀。
  本文后面将详细介绍JVM中实现的垃圾回收器,读者在阅读相关章节时可以从这个几个方面思考垃圾回收器实现的优劣。
  线程管理
  通常高级语言都支持多线程,所以虚拟机需要考虑如何高效地支持多线程,例如高级语言的线程和虚拟机的线程以及操作系统的线程关系是什么?是否可以支持协程?这些内容都非常复杂,部分内容也和垃圾回收密切相关,但限于篇幅,本文不展开介绍。
  以JVM为例,JVM为了执行字节码或者编译代码,需要为代码准备执行的线程和线程栈。例如当启动JVM后,启动线程将变成执行Java的main线程,如果在Java代码中产生新的线程,则由OS产生线程。
  所以,从这个角度来说Java字节码或者编译代码的执行和C语言的执行完全一致。但是JVM为了更好地管理和执行代码,实现了线程对象和线程栈对象,线程对象和线程栈对象也是分配在JVM的本地堆中。线程对象和线程栈对象除了会关联真正底层OS的线程之外,还会存储一些额外的信息,这些信息用于描述当前线程和线程栈的信息,比如线程属于哪个Java线程对象、关联哪个类加载器、线程栈的调用链信息等。
  另外,高级语言通常会支持多言语的互操作,当进行互操作时,需要考虑不同语言线程执行的约定,例如参数和返回值如何组织,内存是否可以互访问等。在JVM中支持通过JNI(JavaNativeInterface)的方式调用CC代码,但是这样的互操作除了要考虑线程管理以外,还要考虑内存的影响,特别是垃圾回收的影响。例如JVM在执行一些JNI时通常会阻塞垃圾回收的执行(例如调用JNI的CriticalAPI),当然阻塞与否还与垃圾回收器的实现有关。在第2章中介绍安全点相关的知识时会进一步展开介绍。扩展阅读:JIT概述
  虚拟机的实现通常可以划分为3部分:运行时(RunTime)、编译优化(JIT)和垃圾回收。已经有较多的书籍和文章介绍了运行时,本文不再介绍。垃圾回收是本文的重点,后面会详细介绍。关于JIT的相关介绍并不多,同时JIT也非常复杂,特别是编译优化的相关知识。
  本节在LinuxAArch64平台的基础上,通过一个简单的例子演示JIT的基本概念。
  首先从一个简单的C代码例子出发,如下所示:includestdio。h
  intadd(inta,intb){
  returnab;
  }
  intmain(){
  printf(d,add(4,5));
  return0;
  }
  该代码片段的功能非常简单,其中函数add实现加法功能。这个add例子和1。4。1节中Java的add功能完全相关,都是完成两个整数的加法计算并返回结果。
  本节构造C的add函数就是为了让读者可以方便地理解在编译优化时Java的函数(字节码片段)可以被一个CC的函数替代。当然,这里省略了JVM构造这个C语言的add函数的过程,这本质上就是编译优化要做的工作。
  使用gcc进行编译,这里先使用O2的编译优化级别,命令如下:
  gccO2otesttest。c
  编译后使用objdump命令查看add函数的反汇编代码:0000000000400650:
  400650:0b010000addw0,w0,w1
  400654:d65f03c0ret
  注意:在AArch64平台中有31个通用寄存器,其中x0x7用于传递参数和返回值。
  w0w7是x0x7的低32位,用于传递32位的参数,当函数的参数个数超过8个时,通过栈传递。
  在这个例子中,add的两个参数通过w0和w1传入,通过add指令完成加法,结果存放在寄存器w0中,通过ret返回函数的执行结果。
  假设JVM识别Java的add函数为热点,现在也知道add函数对应的汇编代码,那么还有一个问题,就是如何让JVM替换原来的add函数而执行编译后的代码。下面通过一个例子演示CC代码直接执行编译后代码的过程。首先将编译后的代码作为输入数据,表示待执行的函数,然后通过mmap函数将数据加载到内存区,并设置内存区可以执行(PROTEXEC),最后再通过函数调用执行相关代码。代码示例如下:includestdio。h
  includememory。h
  include
  typedefint(addfunc)(inta,intb);
  intmain(){
  charcode〔〕{
  0x00,0x00,0x01,0x0b,0x0b010000,等价于指令addw0,w0,w1
  0xc0,0x03,0x5f,0xd60xd65f03c0,等价于指令ret
  };参考objdump对add函数的反汇编代码
  voidcodecachemmap(NULL,sizeof(code),PROTWRITEPROTEXEC,
  MAPANONYMOUSMAPPRIVATE,1,0);
  memcpy(codecache,code,sizeof(code));
  addfuncpadd(addfunc)codecache;
  printf(d,padd(4,5));
  return0;
  }
  示例中通过一个函数调用完成汇编代码的执行。实际上除了使用函数调用以外,还可以直接通过jmp完成相关的调用(函数调用的本质是通过call指令完成控制流的转移)。JVM执行编译后的代码原理和示例介绍基本类似,通过识别热点代码(例如Java中的add函数),并对热点代码进行编译优化,产生目标机器代码(类似于此处C代码中add函数的反汇编代码),然后执行目标机器代码。
  在add函数的编译过程中直接使用了O2的编译优化级别,gcc默认的编译优化级别为O0。下面是使用默认编译优化级别产生的目标文件反汇编的结果。0000000000400624:
  400624:d10043ffsubsp,sp,0x10
  400628:b9000fe0strw0,〔sp,12〕
  40062c:b9000be1strw1,〔sp,8〕
  400630:b9400fe1ldrw1,〔sp,12〕
  400634:b9400be0ldrw0,〔sp,8〕
  400638:0b000020addw0,w1,w0
  40063c:910043ffaddsp,sp,0x10
  400640:d65f03c0ret
  比较O2和O0的编译优化结果可以发现,O2的代码质量远高于O0的代码质量(指令明显少了很多)。那么O2采用的编译优化会更加复杂,编译耗时也更多。JVM中C1和C2编译器的目的也是生成不同指令的编译代码,可以简单理解为gcc不同编译级别产生的代码。当然JVM中C1和C2采用了不同的技术,使用的IR和编译优化手段都不相同。本文给大家讲解的内容是Java虚拟机和垃圾回收基础知识:内存线程JIT概述下篇文章给大家讲解的内容是JVM中垃圾回收相关的基本知识:GC算法分类觉得文章不错的朋友可以转发此文关注小编;感谢大家的支持!

做个快乐孕妈,更需要胆量为了要个健康的宝贝,我和老公在备孕之前都去医院做了详细的身体检查。各项指标都显示身体状况没问题,但是我在怀孕后就开始经常的上腹部疼痛,那种感觉跟胃疼很像,但是比之前的胃疼都要更……1499元,酷冷至尊推出炎神P360水冷散热器双腔体水冷头感谢IT之家网友不再投gao的线索投递!IT之家11月19日消息,酷冷至尊今日发售了炎神P360一体式水冷散热器。该产品采用双腔体水冷头设计,冷热液体分层,同时标配ARG……狂赚1亿美元!20岁大学生为了完成论文,炒股竟然一战封神?说起股神,大家一定会想到巴菲特的名字,而最近美国出现了一位少年股神,靠着炒卖一支不被看好的股票,一个月内狠赚了1。1亿美元。靠垃圾仙股狠赚1亿今年20岁的杰克费曼(……千万别小看千元机?5款1699元以内,让5G手机变得并不是高如果您喜欢,可以点击上面的关注二字。后续会为您提供更多有价值的内容。每日分享千万别小看千元机?5款1599元以内,让5G手机变得并不是高不可攀。第一款:vivoiQ……英特尔600系芯片组将不支持PCIe5。0,仅有四条PCIeIT之家6月5日消息根据外媒Hardwaretimes消息,英特尔下一代600系列主板芯片组近日通过了PCISIG组织的认证。这款PCH芯片仅包含4条PCIe4。0通道,并不会……法甲0大胜最快下轮夺冠北京时间4月21日凌晨3点,202122赛季法甲联赛第33轮一场焦点战,领头羊巴黎圣日耳曼前往客场对阵中下游球队昂热。凭借姆巴佩、拉莫斯和马尔基尼奥斯的进球,巴黎客场30大胜昂……微星展示英特尔12代酷睿CPU开盖照钎焊导热,核心面积明显缩IT之家10月29日消息,据外媒wccftech消息,微星今日在直播中分享了大量英特尔12代酷睿处理器的细节,首次曝光了处理器开盖照片,此外还公布了LGA1700插槽的散热器扣……癌症患者的饮食调理俗话说:民以食为天。癌症患者经治疗后的身体往往还比较虚弱,正确的饮食调理可以改善患者自身的健康状况,维持和恢复各组织的功能,提高机体免疫力,减缓或抑制肿瘤的发展,提高生活质量和……机械革命公布新款高性能台式机,配备100全新RTX显卡IT之家4月26日消息,今天,机械革命宣布再次为玩家们带来了新一代的游戏台式机,并且还是由美女产品经理栾雨晴亲自操刀打造的高性能产品。IT之家了解到,机械革命暂未公布新款……消息称AMD将推EXPODDR5内存超频技术,锐龙7000首IT之家4月25日消息,今年早些时候,有消息称AMD将推RAMP内存超频技术,以应对英特尔的XMP3。0方案。据VideoCardz最新消息,AMD这项技术的正式名称为E……ThinkCentreneo台式机上架搭载12代酷睿英伟达独感谢IT之家网友肖战戈戈的线索投递!IT之家4月22日消息,ThinkCentreneo台式机现已上架,包括13。6L的P600和17L的P780型号,售价5299元起。……联想发布ThinkCentreneo系列台式机搭载12代酷睿IT之家4月20日消息,今天,联想举行新品发布会,发布了ThinkCentreneo系列台式机,搭载了12代酷睿桌面处理器,配备6GB、8G、12GB显存的独显,首发价5299……
可折叠OLED面板市场快速扩张,中国厂商预计今年开始量产据韩国媒体消息,市场调查机构UBIResearch在10月28日的一份报告中预测,可折叠OLED面板的出货量将在2021年达到890万台。到2025年,可折叠OLED面板的出货……这星期使用下来体会了自己的旧旗舰才是真备用机而不是新买的手机14肾最近入手了红米11Pro当做主力机,除了薇信没安装其他什么应用,对了订订当然是少不了,手机通知栏变得很安静很干净,心也不烦了,到家里了需要什么东西用旧手机小米Mix……文石发布BOOXMiraPro显示器25。3英寸超大墨水屏,IT之家5月28日消息文石今晚举行了新品发布会,刚刚发布了BOOXMira系列墨水显示器。BOOXMiraPro显示器配备了25。3英寸超大墨水屏,搭载了文石自研的BSR……文石发布BOOXMira显示器13。3英寸柔性墨水屏,售价4IT之家5月28日消息文石今晚举行了新品发布会,刚刚发布了BOOXMira系列墨水显示器。BOOXMira显示器是便携款,搭载了13。3英寸柔性墨水屏,屏幕分辨率达165……宏碁推出掠夺者系列三款显示器最高42。5英寸,售价7999元感谢IT之家网友顽果度的线索投递!IT之家5月28日消息宏碁于5月27日发布了Predator掠夺者系列三款高端电竞显示器,涵盖28英寸至42。5英寸,售价7999元起,……7分7板,正负值20!太阳白捡奇兵被驱逐,137万年薪已全部比赛最后2。3秒,佩恩为比永博传了一个不错的机会,然而已经输急眼了的独行侠球员克里斯用一个比较大的犯规动作阻止了比永博的扣篮,随后比永博与克里斯发生冲突二人双双被驱逐。这……技嘉AORUSAEROG系列笔记本预热搭载H45处理器,最大IT之家5月8日消息英特尔11代TigerLakeH45系列标压移动处理器发布在即,多家笔记本厂商近期对该系列笔记本进行预热。英特尔这一代H系列CPU采用10nm制程制造,H3……CanalysChromebook笔记本2021年Q1销量同IT之家5月5日消息海外研究机构Canalys今日公布了2021年第一季度全球电脑市场报告。在这一季度,全球电脑市场出货量同比增长53。1,达到了1。221亿台。在这其中,谷歌……TCL华星参展ISE2020展示MiniLED电竞显示器,亮IT之家2月13日消息根据TCL官方的消息,2020年2月11日至14日,一年一度的欧洲专业视听集成设备展(ISE2020)在荷兰阿姆斯特丹举行。TCL华星展示了首次公开亮相的……CES2020全球首台喷墨打印可卷绕柔性OLED屏发布IT之家1月9日消息1月7日,广东聚华与TCL华星联合发布了全球首款31英寸喷墨打印可卷绕柔性样机。TCL华星表示,这是全球首款结合量子点(QD)与OLED优势的31英寸喷墨打……米物推出Z680c无线机械键盘紧凑68键,199元IT之家11月29日消息,米物现已推出POP系列机械键盘Z680C,紧凑68键布局,可选红轴、青轴和茶轴,售价199元,11月30日开卖。设计方面,官方表示Z680C采用……用牙齿开酒瓶?这些危险行为不要再做了前两天生日,大家聚在一起煮了火锅吃,开心之余,老弟说要喝瓶微醺助助兴,但是因为刚搬家,东西都没好好收拾,开瓶器一直半会找不到,老弟说,不用找了,我用牙开!我:???其实这……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网