jvm
文章平均质量分 88
~Will~
这个作者很懒,什么都没留下…
展开
-
T07GC调优(一)
一般电商架构可能会使用多级缓存架构,就是redis加上JVM级缓存,有时可能为了图方便对于JVM级缓存就简单使用一个hashmap,于是不断往里面放缓存数据,但是很少考虑这个map的容量问题,结果这个缓存map越来越大,一直占用着老年代的很多空间,时间长了就会导致full gc非常频繁,这就是一种内存泄漏,对于一些老旧数据没有及时清理导致一直占用着宝贵的内存资源,时间长了除了导致full gc,还有可能导致OOM。然后利用jstack和jvisualvm来定位CPU使用较高的代码。原创 2024-01-28 10:21:33 · 917 阅读 · 0 评论 -
T06垃圾收集器G1&ZGC
它默认的停顿目标为两百毫秒, 一般来说, 回收阶段占到几十到一百甚至接近两百毫秒都很正常, 但如果我们把停顿时间调得非常低, 譬如设置为二十毫秒, 很可能出现的结果就是由于停顿目标时间太短, 导致每次选出来的回收集只占堆内存很小的一部分, 收集器收集的速度逐渐跟不上分配器分配的速度, 导致垃圾慢慢堆积。安全点就是指代码中一些特定的位置,当线程运行到这些位置时,它的状态是确定的,这样JVM就可以安全的进行一些操作,比如GC等,所有GC不是想什么时候做就立刻触发的,是需要等待所有线程运行到安全点之后才能触发。原创 2024-02-03 16:56:18 · 633 阅读 · 0 评论 -
T05垃圾收集算法与垃圾收集器ParNew & CMS
对于对象年龄应该为多少才移动到老年代比较合适,本例中一次minor gc要间隔二三十秒,大多数对象一般在几秒内就会变为垃圾,完全可以将默认的15岁改小一点,比如改为5,那么意味着对象要经过5次minor gc才会进入老年代,整个时间也有一两分钟了,如果对象这么长时间都没被回收,完全可以认为这些对象是会存活的比较长的对象,可以移动到老年代,而不是继续一直占用survivor区空间。也可以反过来,标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象。当前虚拟机的垃圾收集都采用分代收集算法。原创 2024-01-28 09:54:55 · 822 阅读 · 0 评论 -
T04JVM内存分配机制
如果这个对象覆盖了finalize方法,finalize方法是对象脱逃死亡命运的最后一次机会,如果对象要在finalize()中成功拯救自己,只要重新与引用链上的任何的一个对象建立关联即可,譬如把自己赋值给某个类变量或对象的成员变量,那在第二次标记时它将移除出“即将回收”的集合。JDK7之后默认开启。JVM内存分配是在堆上进行分配,当对象没有被引用的时候,需要依靠GC进行回收内存,如果对象的数量较多的时候,会给GC带来较大的压力,也间接影响了应用的性能。软引用在实际中有重要的应用,例如浏览器的后退按钮。原创 2024-01-27 22:36:34 · 1024 阅读 · 0 评论 -
T01类加载机制
加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表整个类的java.lang.Class对象,作为方法区整个类的各种数据的访问接口。加载某个类的时会先为委托父加载器寻找目标类,找不到再委托上层父加载器加载,如果所有父加载器在自己的加载类路径下都找不到目标类,则在自己的类路径下查找并载入目标类。上面的类加载的过程主要是通过类加载器来实现的,Java里有如下的类加载器。原创 2024-03-07 20:15:05 · 1065 阅读 · 0 评论 -
jvm相关
链接阶段:验证 -> 准备 -> 解析。加载阶段:通过IO操作读入文件的过程。类加载系统整体工作过程。原创 2023-11-09 23:25:14 · 49 阅读 · 1 评论