![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 56
强那个强
这个作者很懒,什么都没留下…
展开
-
JVM调优-大对象分配
每当应用程序使用G1收集算法时,GC时对大对象的分配可能会影响应用程序的性能(强调:大对象分配是指大于region大小的50%对象的分配)。频繁地大对象分配会引发一下GC性能问题:如果region当中包含大对象,剩余regiong空间将不再被使用,如果对象只是刚刚超过region的50%多一点,那么就会造成很大的空间浪费。 对于大对象的收集,G1并不像常规那样处理,JAVA1.8u40之前,大对象的回收只能在Full GC事件期间完成,Hotspot JVM 最新版本会在清除阶段标记周期结束时释放原创 2021-01-01 17:09:12 · 2658 阅读 · 0 评论 -
JVM调优-JVMTI tagging & GC
当应用程序与JAVA代理(-javaagent)一起运行时,代理旧有可能使用JVMTI标记堆中的对象。代理可以出于各种原因使用JVMTI进行对象标记,但是如果标记大量的对象,那么GC的性能就会收到影响,从而影响到应用程序的性能。这个问题存在于本地代码中,其中JvmtiTagMap::do_weak_oops在每个垃圾收集事件期间遍历所有JVMTI标记的对象,并对所有JVMTI标记的对象执行开销不大的操作。更糟糕的是这个操作是顺序执行的不是并行的。当存在大量的JVMTI标记对象时,这意味着GC过程大部原创 2021-01-01 17:07:48 · 166 阅读 · 0 评论 -
JVM调优-RMI & GC
当你应用程序通过RMI发布消息或消费服务时,JVM会定期启动Full GC,确保本地未使用的对象也不会占用内存空间,即使没有在代码逻辑当中添加任何基于JMI的内容,第三方库或工具类仍然可以打开RMI端点(常见的就是JMX),如果远程连接到它,它就会使用RMI在底层发布数据。RMI造成的问题通常是Old Generation剩有大量空间,但是会触发Full GC,造成stop-the-world。删除远程引用对象的行为是通过System.gc()触发的,调用System.gc()在sun.rmi.tr原创 2021-01-01 17:06:50 · 669 阅读 · 1 评论 -
JVM调优-软、弱、虚、引用对象
影响GC的另一类问题是非强引用(软弱虚引用对象)的使用有关,虽然在许多情况下可能有助于避免不必要的OutOfMemoryError,但是大量使用这样的引用会影响垃圾收集的行为方式,影响应用程序的性能。在使用弱引用时,应该知道弱引用进行垃圾收集的方式。每当GC发现一个对象是弱可达对象时(也就是说对该对象的最后一个引用是弱引用),该弱可达对象就会放到相应的ReferenceQueue上成为符合结束条件的对象。然后轮询这个引用队列并执行相关的清理活动。这种清除的一个典型例子是从缓存中删除现在丢失的键。解决原创 2021-01-01 17:05:05 · 148 阅读 · 0 评论 -
JVM分配速率-过早的晋升
在解释过早地晋升的概念之前,我们先熟悉下晋升率(promotion rate):晋升率是在单位时间内将从Young Generation的对象数据传播到Old Generation对象的数量来衡量的,晋升率通常以(MB/sec)为单位。将在Young Generation长期存活的对象晋升到Old Generation是我们期望的行为。我们假设一种情况,不仅长期存活的对象存在Old Generation,没有在Young Generation没有达到预期寿命的对象也晋升到了老年代当中(这种成为过早提升)原创 2021-01-01 17:00:52 · 593 阅读 · 0 评论 -
GC调优-分配速率
原创 2021-01-01 16:55:24 · 128 阅读 · 0 评论 -
GC调优基础
GC调优过程: 1、列出性能目标 2、运行测试代码 3、测量结果 4、将结果与性能目标相对比 5、如果没达到性能目标,则重新修改执行测试。性能目标分类: Latency、Throughput、Capacity(基础设施成本限制:例如设备资源都是有限的,不可能任意添加)【JVM】吞吐量与延迟关系:堆内存增大,gc一次能处理的垃圾对象增大,吞吐量增大,但gc一次的时间会延长,导致后面排队的线程等待时间延长。内存堆减小,g...原创 2020-12-31 16:46:20 · 109 阅读 · 0 评论 -
G1 – Garbage First
G1在 JDK7u4以上都可以使用,在JDK9开始,G1为默认的垃圾收集器,以替代CMS。扩展阅读(https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc.html)Collection Set:CSet是指一组可被回收的regions的集合。CSet涵盖的regions会在GC的过程中被异动到另一个regions。CSet中的regions可以来自Eden、Survivor、old。CSet会占用不到整个原创 2020-12-31 16:43:36 · 125 阅读 · 0 评论 -
Concurrent Mark and Sweep
Concurrent Mark and Sweep优点:大量的工作听过并发线程处理,不需要stop-the-world缺点:老年代碎片多且在某些情况下暂停时间不可预测,特别是大型堆栈。启用参数: -XX:+UseConcMarkSweepGC主要目的是: 减少GC时间,因为要抢占多大多数的cpu时间或全部cpu时间,所以应用的吞吐量相对于在Parallel GC会小。并发标记清除算法:在Young Generation使用的是并行mark-copy且stop-the-...原创 2020-12-31 16:36:20 · 789 阅读 · 0 评论 -
Parallel GC
Parallel GC并行垃圾收集器:在young generation使用mark-copy,在Old Generation使用mark-sweep-compact;且在Young Generation和Old Generation 都会stop-the-world;收集器都使用多线程进行标记-复制和标记-压缩。-XX:ParallelGCThreads=0 —指定并行垃圾收集器执行的线程数量;默认为所在机器的逻辑核数;当逻辑核数超过8时计算公式为: ...原创 2020-12-31 16:27:30 · 1376 阅读 · 0 评论 -
Serial GC
Serial GC:串行垃圾收集器:在Young Generation使用mark-copy,在Old Generation使用mark-sweep-compact,并且都是单线程收集器;都会触发stop-the-world。 只需要单个参数设置java -XX:+UseSerialGC com.mypackages.MyExecutableClass 垃圾收集器使用:young 是 mark-copy;tenured是mark-sweep-compact 会引发stop-th...原创 2020-12-31 16:24:46 · 779 阅读 · 0 评论 -
打印GC信息使用到的参数:
打印GC信息使用到的参数:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps原创 2020-12-31 16:20:58 · 153 阅读 · 0 评论 -
GC触发原因
GC触发条件:GCLocker Initiated GC、Allocation Failure、Metadata GC Threshold原创 2020-12-31 16:19:18 · 1098 阅读 · 0 评论 -
JVM默认选项
Java8 默认使用:-XX:+UseParalleGC -XX:+UseParallelOldGCJava9 默认使用:G1原创 2020-12-31 16:15:49 · 80 阅读 · 0 评论 -
JVM关键词解析
标记(mark):找出所有活着的对象stop the world:既不取决于堆的大小,也不取决于对象的总数大小,而是取决于活着对象的数量。移除未使用对象:清除、压缩、复制。原创 2020-12-31 16:14:42 · 103 阅读 · 1 评论 -
从GC roots标记可达对象:
从GC roots标记可达对象:执行方法的输入参数和局部变量活动的线程静态变量JNI引用对象扩展阅读https://www.cnblogs.com/kabi/p/6531375.html原创 2020-12-31 16:12:41 · 109 阅读 · 0 评论