首页 > 其他分享 >常见问题

常见问题

时间:2022-11-14 16:56:07浏览次数:69  
标签:常见问题 Survivor 对象 XX gc 年龄 年代

一:JVM

1.Jvm对象进入老年代的场景

1、大对象直接进入老年代
 大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。JVM参数
XX:PretenureSizeThreshold 可以设置大 对象的大小,如果对象超过设置大小会直接进入老年
代,不会进入年轻代,这个参数只在 Serial 和ParNew两个收集器下 有效。比如设置JVM参数:
-XX:PretenureSizeThreshold=1000000 (单位是字节) -XX:+UseSerialGC ,再执行下上
面的第一 个程序会发现大对象直接进了老年代 

为什么要这样呢?(原因) 
为了避免为大对象分配内存时的复制操作而降低效率。

2、长期存活的对象将进入老年代
  既然虚拟机采用了分代收集的思想来管理内存,那么内存回收时就必须能识别哪些对象应
    放在新生代,哪些对象应放在 老年代中。为了做到这一点,虚拟机给每个对象一个对象年龄
    (Age)计数器。 如果对象在 Eden 出生并经过第一次 Minor GC 后仍然能够存活,并且
    能被 Survivor 容纳的话,将被移动到 Survivor 空间中,并将对象年龄设为1。对象在 
    Survivor 中每熬过一次 MinorGC,年龄就增加1岁,当它的年龄增加到一定程度 (默认为
    15岁,CMS收集器默认6岁,不同的垃圾收集器会略微有点不同),就会被晋升到老年代中。
    对象晋升到老年代 的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。

3.对象动态年龄判断
当前放对象的Survivor区域里(其中一块区域,放对象的那块s区),一批对象的总大小
    大于这Survivor区域内存大小的 50%(-XX:TargetSurvivorRatio可以指定),那么此时
    大于等于这批对象年龄最大值的对象,就可以直接进入老年代了, 例如Survivor区域里现
    在有一批对象,年龄1+年龄2+年龄n的多个年龄对象总和超过了Survivor区域的50%,此时
    就会 把年龄n(含)以上的对象都放入老年代。这个规则其实是希望那些可能是长期存活的对
    象,尽早进入老年代。
    
    对象动态年 龄判断机制一般是在minor gc之后触发的。

4. 老年代空间分配担保机制
    年轻代每次minor gc之前JVM都会计算下老年代剩余可用空间 如果这个可用空间小于年轻代
里现有的所有对象大小之和(包括垃圾对象) 就会看一个“-XX:-HandlePromotionFailure”
(jdk1.8默认就设置了)的参数是否设置了 如果有这个参数,就会看看老年代的可用内存大小,
是否大于之前每一次minor gc后进入老年代的对象的平均大小。 如果上一步结果是小于或者之
前说的参数没有设置,那么就会触发一次Full gc,对老年代和年轻代一起回收一次垃圾, 如果
回收完还是没有足够空间存放新的对象就会发生"OOM" 当然,如果minor gc之后剩余存活的需
要挪动到老年代的对象大小还是大于老年代可用空间,那么也会触发full gc,full gc完之后如
果还是没有空间放minor gc之后的存活对象,则也会发生“OOM”

 

2.. redis实现分布式锁要注意什么?

  1. 加锁过程要保证原子性
  2. 保证谁加的锁只能被谁解锁,即Redis加锁的value,解锁时需要传入相同的value才能成功,保证value唯一性;
  3. 设置锁超时时间,防止加锁方异常无法释放锁时其他客户端无法获取锁,同时,超时时间要大于业务处理时间;


标签:常见问题,Survivor,对象,XX,gc,年龄,年代
From: https://www.cnblogs.com/juncaoit/p/16889510.html

相关文章

  • pg到达梦数据迁移常见问题
    1 迁移提示ERROR:columnt1.tgconstrnamedoesnotexistPosition:113重新迁移,选择转换的时候提示:ERROR:columnt1.tgconstrnamedoesnotexist解决方案,下载对......
  • .NET应用开发之SQLServer常见问题分析
    日常我们开发.NET应用时会使用SQLServer数据库,对于SQLServer数据库的日常开发有一些技能和工具,准备给大家分享一下。一、场景1:SQLServer死锁分析 执行以下SQL,启用SQLSe......
  • C++ 面经:项目常见问题 ----- nagle算法,keepalive,Linger 选项
    nagle算法应用场景:1.对于实时性要求很高的交互上,我们不能使用nagle算法,比如FPS射击类PVP对抗类游戏,或者MMO类的对实时要求很高的游戏开发来说是显而易见需要禁掉的,因为假......
  • pycharm 调代码常见问题
    1.  “NoPythoninterpreterconfiguredfortheproject”   没有为项目配置Python解释器。  解决办法:在选择 file-》setting,然后界面如下:在project......
  • 技术分享:IPv6升级转换常见问题盘点
                 随着IPv6网络的普及,IPv6环境的问题处理已经成为网站管理员的必修课,但是由于绝大部分网站运维人员对IPv6网络的接触都不深,因此网站进行IPv6......
  • 关于apple上架常见问题汇总
     最近在研究apple上架的项目,其中发现要真正把一个项目上传到AppStore是很困难的,然后我去把目前遇到的问题整理成一片文章方便以后上传再次需要和供其他人做个参考。App......
  • 关于apple上架常见问题汇总
    ​最近在研究apple上架的项目,其中发现要真正把一个项目上传到AppStore是很困难的,然后我去把目前遇到的问题整理成一片文章方便以后上传再次需要和供其他人做个参考。Apple......
  • 常见问题
    行内元素有哪些?块级元素有哪些?CSS的盒模型?块级元素:divph1h2h3h4formul行内元素:abbrispaninputselectCss盒模型:内容,border,margin,padding简述同步......
  • 软件企业研发体系常见问题及解决思考
    文/王不留(微信公众号:程序员生存指南) ◎ 一个公司的运营通常可以分成四大块:售前、研发、交付、职能。 售前主要包含销售人员和咨询人员。项目型公司会以售前为主力,重点......
  • socket编程的常见问题
    英文小册原文地址:​​beej.us/guide/bgnet…​​作者:Beej中文翻译地址:​​www.chanmufeng.com/posts/netwo…​​1.我从哪获取这些头文件资料?如果你的系统中没有自带这些文......