动力节点-面试题-JVM.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动力节点-面试题-JVM

JVM相关面试题 1. JVM运行时内存结构 1.由如下图构成。Runtime Data Area有如下几个区,其中PC程序计数器、虚拟机栈和本地方法栈是线程独享 的,堆和方法区是线程共享的。Classload用来加载class文件,执行引擎用 来执行程序,本地方法接口调用本地方法库。 2.java stack比较简单,每一个都是一个栈帧,每个栈帧由三部分构成。局部变量 区、操作数区和帧数据区。局部变量是一个以数组形式管理的内存区,一般 第0位是指向自己的this引用;其他的都是基本数据类型和reference类型和 returnedAddress类型。操作数区不是通过索引来访问,通过入栈出栈来访 问,是临时数据的存储区域,比方说数学计算。帧数据区是保存一些指向常 量池的指针,需要常量数据时就通过这个指针来访问常量池数据。 1 3. 共享内存区:分为permanent space、old space、From survivor、To survivor和Eden。其中premanent包括runtime constant pool和已加载的类信息和方法信息。Old space (tenured generation)包含生命周期长的存活对象。From survivor和Eden存放存活比较短的对象,To survivor是用来复制保存存活的对象。 4.JVM参数设置。 堆: -Xmx:最大堆内存,如:-Xmx512m -Xms:初始时堆内存,如:-Xms256m -XX:MaxNewSize:最大年轻区内存 -XX:NewSize:初始时年轻区内存.通常为 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 个 Survivor 空间。实际可用空间为 = Eden + 1 个 Survivor,即 90% -XX:MaxPermSize:最大持久带内存 -XX:PermSize:初始时持久带内存 -XX:+PrintGCDetails。打印 GC 信息 -XX:NewRatio 新生代与老年代的比例,如 – XX:NewRatio=2,则新生代占整个堆空间的1/3,老年代占2/3 -XX:SurvivorRatio 新生代中 Eden 与 Survivor 的比值。默认值为 8。即 Eden 占新生代空间的 8/10,另外两个 Survivor 各占 1/10 栈: -xss:设置每个线程的堆栈大小. JDK1.5+ 每个线程堆栈大小为 1M,一般来说如果栈不是很深的话, 1M 是绝对够用了的。List集合存储元素特点? 2. 对象和内存溢出 1. 对象。 A.创建。首先检查指令的参数能不能在常量区找到类的符号引用,并检 查这个类是否加载、解析和初始化过,如果没有就执行类的加载过程 。其次是内存分配,类加载之后就知道要分配的内存大小,分配方法 有两种,一种是指针碰撞,就是一块内存是使用过的,一块是未使用 的,用一个指针分割,新分配的内存指针就向空闲的挪动,compact 功能的虚拟机是用指针碰撞;另一种是空闲列表,就是一个列表记录 2 空闲的内存块,不断更新列表,新分配的内存在列表中寻找一个合适 大小的内存块,sweep功能的虚拟机是使用空闲列表。第三,在分配 内存空间的时候,还要考虑并发性。有两个方法,一种是同步处理, 如采用CAS和失败重试的方法;另外一种是把内存分配动作按照线程 划分在不同的空间之中,每个线程在堆中预先分配一小块内存,本地 线程分配缓冲TLAB,那个线程需要分配内存在那个TLAB上分配,只有 TLAB用完了,才

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档