JVM笔记

news/2024/11/8 20:41:20/

    • Java中对象一定分配在堆空间上吗?
    • 判断一个对象是否还活着
    • GC
    • gc频繁

Java中对象一定分配在堆空间上吗?

逃逸分析:分析对象动态作用域,当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。
在编译期间根据逃逸分析的结果,来决定是否可以将对象的内存分配从堆转化为栈。如果经过逃逸分析后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配内存,也无须进行垃圾回收了。

判断一个对象是否还活着

  1. 引用计数
  2. 可达性分析
    GC Root
    • 虚拟机栈中引用的对象
    • 方法区类静态属性引用的对象
    • 方法区常量池引用的对象
    • 本地方法栈JNI引用的对象
  3. 强引用,软,弱,虚
  4. 死亡二次标记
    不可达,判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。
    若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。
    在finalize方法里将当前对象与 GC Roots 再次关联。若仍不可达,则进行回收

GC

在这里插入图片描述
新生代:老年代=1:2
新生代分为 Eden 和 两个 Survivor 区域,Edem :Survivor *2 = 8 : 1 : 1

新生代 Minor GC 复制清除 频繁
老年代 Full GC 标记清除 次数少,时间长,容易有碎片导致gc

当一个对象被判定为 “死亡” 的时候,
当对象在 Eden ( 包括一个 Survivor 区域,这里假设是 from 区域 ) 出生后,在经过一次 Minor GC 后,如果对象还存活,并且能够被另外一块 Survivor 区域所容纳( 上面已经假设为 from 区域,这里应为 to 区域,即 to 区域有足够的内存空间来存储 Eden 和 from 区域中存活的对象 ),则使用复制算法将这些仍然还存活的对象复制到另外一块 Survivor 区域 ( 即 to 区域 ) 中,然后清理所使用过的 Eden 以及 Survivor 区域 ( 即 from 区域 ),并且将这些对象的年龄设置为1,以后对象在 Survivor 区每熬过一次 Minor GC,就将对象的年龄 + 1,当对象的年龄达到某个值时 ( 默认是 15 岁,可以通过参数 -XX:MaxTenuringThreshold 来设定 ),这些对象就会成为老年代。
对于一些较大的对象 ( 即需要分配一块较大的连续内存空间 ) 则是直接进入到老年代。

gc频繁

Full GC次数过多,主要有以下两种原因:

  • 代码中一次获取了大量的对象,导致内存溢出;
  • 内存占用不高,但是Full GC次数还是比较多,此时可能是显示的 System.gc()调用导致GC次数过多,可以禁用JVM对显示GC的响应。
  • 堆栈日志+压测,查看日志
  • 多线程,死锁/多线程阻塞

http://www.ppmy.cn/news/87510.html

相关文章

香港VPS服务器如何屏蔽指定访客ip?

​  如果你是一个香港VPS服务器的管理员,你可能会遇到一些不良用户或者恶意攻击者,这些人会尝试通过不断的访问和攻击你的网站来破坏你的网站的运行。如何保护你的网站,你需要使用一些方法来屏蔽这些指定的访客IP。 首先,你需要…

当你在浏览器中输入 URL 时会发生什么?

下面的图解说明了步骤。 1.Bob 在浏览器中输入 URL 并按下 Enter。在这个例子中,URL 由 4 部分组成: 🔹 协议 - http://. 这告诉浏览器使用 HTTP 发送连接到服务器。 🔹 域名 - example.com. 这是站点的域名。 🔹 路径…

通过计算属性来更改几个数据,针对于这几个数据有失焦事件,但是先触发了失焦事件,后获得到了计算属性怎么办,我想先获取到计算属性的值再进行失焦事件

计算属性是惰性的,只有依赖的数据发生变化时才会重新计算。这可能会导致失焦事件先触发,获取到的计算属性值还未更新的情况。要解决这个问题,有两种方法:1. 在失焦事件中加入 setTimeout,等计算属性重新计算后再获取其值。 js computed: {fullName() { /* ... */ } }, metho…

C++入门预备语法

C入门预备语法 C关键字命名空间C输入&输出初步缺省参数函数重载引用内联函数auto和范围for(C11)指针空值nullptr C关键字 命名空间 命名空间是一种将变量名、函数名、类名和库名称等封装到一个命名空间域中,与其他域的同名量相隔离&…

利用视听短片从自然刺激中获得开放的多模式iEEG-fMRI数据集

在认知神经科学领域,数据共享和开放科学变得越来越重要。虽然许多参与认知神经科学实验的志愿者的数据集现在是公开可用的,但颅内脑电图(iEEG)数据的共享相对较少。iEEG是一种高时间和空间分辨率的记录技术,通过在患者…

【Servlet 基础】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1. 什么是Servlet? 2. 第一个Serv…

量子力学专题:线性谐振子

任何体系在平衡位置附近的小振动,例如 分子振动、晶格振动、原子核表面振动以及辐射场的振动等往往都可以分解成 若干彼此独立的一维简谐振动简谐振动往往还作为复杂运动的初步近似 见理论力学专题(小振动) 双原子分子,两原子间的…

Android 12.0 NavigationBarView 导航栏 左边显示的修改

1.概述 在12.0定制化开发中,要求导航栏左边显示的定制化,这时需要了解导航栏的显示控制方向,然后修改显示方向 在10.0以后关于导航栏显示位置都是在DisplayPolicy.java中处理的所以查询相关的设置方法,然后修改导航栏显示方向2.NavigationBarView 导航栏 左边显示的修改的…