JVM关键知识点笔记.docxVIP

  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调优 概念 Java数据类型:基本类型和引用类型。 栈只能向上扩展,堆可以动态扩展。 堆和栈:栈解决程序运行问题;堆解决程序存储问题;Java中一个线程会有一个线程栈与之对应,存储当前线程相关信息,包括局部变量、程序运行状态、方法返回值;堆是线程共享,只负责存储对象信息;堆中存放对象,栈中存放基本数据类型和对象的引用,栈中存放的是一个4byte的对象的引用; 基本数据类型存放栈中,一是因为其占用空间较少,另一个也因为其不会动态增长; Java中参数传递是传值,还是传递引用? 因为程序永远在栈中运行,所以传递的只会是基本数据类型和对象引用,不会直接传递对象本身;Java在传值的时候,因为没有指针,所以都是传的值(引用传递的也是数值);传引用的方法调用实际上就是传引用值,跟基本类型传值一样操作;但是当进入被调用方法时,被传递的引用会被解释到堆中的对象,对应到真正对象,此时修改,修改的将是真正的对象。 栈是程序运行最根本的,可以没有堆,但不可以没有栈;Java中通过-xx来修改栈的大小,当存储数据较多,需适当调节此值,否则会报java.lang.StackOverflowError异常,常见的出现这个异常的是无法返回的递归,因为此时栈中保存的信息都是方法返回的记录点。 对象大小 一个空Object对象在堆中的大小是8Byte,当然还需在栈中花4Byte存储其引用地址;java对象在内存的划分都是以8的整数倍来分。 封装类型的大小 封装类型至少是12Byte(8+4),即一个空对象至少是12,因java是以8整数倍来分,所以至少是16。 引用类型: 强引用,弱引用,软引用,虚引用。 强引用:就是我们一般声明对象是时虚拟机生成的引用,强引用:就是我们一般声明对象是时虚拟机生成的引用; 软引用:软引用一般被做为缓存来使用。虚拟机会根据当前系统的剩 余内存来决定是否对软引用进行回收。虚拟机在发生OutOfMemory时,肯定是没有软引用存在的。 弱引用:弱引用与软引用类似,都是作为缓存来使用。但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的, 我们系统一般在使用时都是用的强引用。而“软引用”和“弱引用”比较少见。 基本垃???回收算法 按基本策略分: 引用计数:对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收 时,只用收集计数为0的对象;此算法最致命的是无法处理循环引用的问题。 标记清除:此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。 复制:此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。 标记-整理:此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。 第 10 按分区对待方式: 增量收集:实时垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么 原因JDK5.0中的收集器没有使用这种算法的。 分量收集:基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青 代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法的。 按线程分: 串行收集:串行收集:串行收集使用单线程处理所有垃圾回收工作,因为无需多线程交互,实现容易,而且效率比较高。 并行收集:并行收集使用多线程处理垃圾回收工作,因而速度快,效率高。而且理论上CPU数目越多,越能体现出并行收集器的优势。 并发收集:相对于串行收集和并行收集而言,前面两个在进行垃圾回收工作时,需要暂停整个运行环境,而只有 垃圾回收程序在运行,因此,系统在垃圾回收时会有明显的暂停,而且暂停时间会因为堆越大而越长。 垃圾回收面临问题 如何区分垃圾? 遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢? 栈是真正进行程序执行地方,所以要获取哪些对象正在被使用,则需要从Java栈开始。同时,一个栈是与一个线程对应的,如果有多个线程的话,则必须对这些线程对应的所有的栈进行检查。除了栈外,还有系统运行时的寄存器等,也是存储程序运行数据的。这样,以栈或寄存器中的引用为起点,可以找到堆

文档评论(0)

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

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

1亿VIP精品文档

相关文档