jvm
文章平均质量分 77
java虚拟机相关
zhangkaixuan456
这个作者很懒,什么都没留下…
展开
-
从Java BIO到NIO再到多路复用,看这篇就够了
实际上,它是一个索引值,指向一个文件记录表,该表记录内核为每一个进程维护的文件记录信息。看下入参,需要用户主动传入要监视的文件描述符数量,可读文件描述符集合,可写文件描述符集合,异常文件描述符集合等入参,实际上就干了一件事,以前由用户态去循环遍历所有客户端产生系统调用(如果10k个socket,需要产生10k个系统调用),改成了由内核遍历,如果select模式,只需10系统调用(因为select最大支持传入1024个文件描述符),如果是poll模式(不限制文件描述符数量),则只需1次系统调用。原创 2023-06-06 12:51:22 · 175 阅读 · 0 评论 -
java性能优化案例——面试可能用得到
除了节省机器资源外,性能好的应用相对于性能差的应用,在应对流量突增时更不容易达到机器的性能瓶颈,在同样流量场景下进行机器扩容时,也只需要更少的机器,从而能够更快的完成扩容、应急操作。新的实现方式是在进行变量替换之前,通过循环模板内容字符串,利用双指针把模板里面所有变量都提取出来,再对变量集合进行循环,依次替换掉模板内容里面的变量。但V4版的代码可读性是不如V3版的,可以把V3版和V4版相结合,剔除掉缓存依赖,产生一个代码可读性和性能最佳的V5版。也就意味着,同一个模板对应的变量都是固定不变的。原创 2022-09-15 09:48:06 · 479 阅读 · 0 评论 -
jvm调优——出自百度内部文章分享
jvm调优案例,线上真实案例原创 2022-11-02 14:43:34 · 91 阅读 · 0 评论 -
内存溢出oom——生产真实案例分析,max-http-header-size配置不当
内存溢出oom——生产真实案例分析,max-http-header-size引发的生产问题原创 2021-12-10 18:32:44 · 2277 阅读 · 0 评论 -
JVM三色标记
三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器所使用垃圾回收算法即为三色标记法。三色标记算法思想三色标记法将对象的颜色分为了黑、灰、白,三种颜色。白色:该对象没有被标记过。(对象垃圾)灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完。(GC需要从此对象中去寻找垃圾)黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了。(程序所需要的对象)原创 2021-10-11 10:36:18 · 258 阅读 · 0 评论 -
JVM调优必备,死磕GC日志(一图看懂)
性能测试,排查定位问题,JVM调优过程中,都会遇到要分析GC日志,那你看得懂GC日志吗?JVM GC 相关的参数-XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信原创 2021-07-22 10:05:29 · 253 阅读 · 0 评论 -
java JMM内存模型
JMM的概念Java内存模型,不存在的东西,概念!约定!关于JMM的一些同步的约定:1、线程解锁前,必须把共享变量立刻刷回主存。2、线程加锁前,必须读取主存中的最新值到工作内存中!3、加锁和解锁是同一把锁线程、工作内存与主存之间的关系内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和write操作在某些平台上允许例外) lock (锁定):作用于主内存的变量,把一个变量标识为线程独占.原创 2021-05-16 13:16:30 · 227 阅读 · 0 评论 -
java发生full gc的时机——gc详细流程!
什么时候触发 GC什么时候触发Young GC----针对年轻代当Eden区满了的时候,会触发Young GC什么时候触发 Full GC----针对整个堆在发生Young GC的时候,虚拟机会检测之前每次晋升到老年代的平均大小是否大于年老代的剩余空间,如果大于,则直接进行Full GC;如果小于,但设置了Handle PromotionFailure,那么也会执行Full GC。-XX:HandlePromotionFailure:是否设置空间分配担保JDK7及以后这个参数..原创 2021-05-11 23:27:16 · 2402 阅读 · 0 评论 -
JVM优化之常用参数解读—— -Xss -Xms -Xmx -Xmn 参数设置
Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。-Xms 堆内存的初始大小,默认为物理内存的1/64-Xmx 堆内存的最大大小,默认为物理内存的1/4-Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn-Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过原创 2021-04-30 17:49:45 · 1558 阅读 · 2 评论 -
java 9种常见的OOM场景——原因分析及解决方案
目录一. StackOverflowError1.1 写个 bug1.2 原因分析1.3 解决方案二. Java heap space2.1 写个 bug2.2 原因分析2.3 解决方案内存泄露和内存溢出三、GC overhead limit exceeded3.1 写个 bug3.2 解决方案四、Direct buffer memory4.1 写个 bug4.2 解决方案五、Unable to create new native thread原创 2020-12-29 14:00:47 · 4440 阅读 · 3 评论 -
Java中的内存泄露——原因总结,及解决办法!
为什么会产生内存泄漏?当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。内存泄漏对程序的影响?内存泄漏是造成应用程序OOM的主要原因之一。我们知道Android系统为每个应用程序分配的内存是有限的,而当一个应用中产生的内存泄漏比较多时,这就难免会导致应用所需要的内存超过系统分配的内存限额,这就造成了内存溢出从而导致应用Crash。如何检查和分析内存泄漏?因为内存泄漏是在堆内转载 2020-09-16 11:27:02 · 1500 阅读 · 2 评论 -
生产环境如何排除和优化 JVM?
如果是在生产环境中直接排查 JVM 的话,最简单的做法就是使用 JDK 自带的 6 个非常实用的命令行工具来排查。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可以使用命令行工具直接运行。1. jps(虚拟机进程状况工具) jps(JVM Process Status tool,虚拟机进程状况工具)它的功能和 Linux 中的 ps 命令比较类似,用于列出正在运行的 JVM 的 LVMID(Local Virt...原创 2020-09-14 11:18:29 · 371 阅读 · 0 评论 -
服务器OOM,jvm排查,调优思路!
常用参数 内存相关 -Xms:最小堆大小,如-Xms256m -Xmx:最大堆大小,如-Xmx512m -Xmn:新生代大小,如-Xmn是64m -XX:NewRatio:新生代与老年代的比例,如–XX:NewRatio=2,老年代过大的时候,Full GC的时间会很长;老年代过小,则很容易触发Full GC,Full GC频率过高。 -XX:SurvivorRation:设置Eden与Srivivor的大小比例,如-XX:SurvivorRation=8,代表1个Survivor原创 2020-09-09 23:15:48 · 1019 阅读 · 0 评论 -
java.lang.OutOfMemoryError——java oom总结!
一般你去面试的时候,面试官经常会问:请谈谈你对OOM的认识?然后,你可能会说OOM就是out of memory,那如果你只是这么答的话,这可不是面试官想要的答案;面试官又接着问,那你生产过程中有遇到哪些OOM呢?请你说说出常见的OOM问题?这时的你可能是懵的。你知道几种常见的OOM呢?欢迎评论区留言。 常见的OOM总述:1. StackOverflowError 线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常 。递归调用方法...原创 2020-08-18 19:02:35 · 465 阅读 · 0 评论 -
JVM之逃逸分析,栈上分配,标量替换——深度解析!
目录1.对象分配流程总览1.1逃逸分析所处的阶段1.2什么是逃逸分析2.基于逃逸分析的优化2.1栈分配:2.2 同步锁消除2.3分离对象或标量替换。1.对象分配流程总览1.1逃逸分析所处的阶段 通过上图的对象分配流程,我们可以知道逃逸分析是发生在第一步判断对象是否可以在栈上分配的时候, 在栈上分配的目的是为了减少将对象分配到堆上的概率,节约堆内存,减少GC压力。 逃逸分析是JVM为了优化对象分配而做的一种优化措施。1.2什么是逃逸分析...原创 2020-07-08 15:40:59 · 4460 阅读 · 7 评论 -
synchronized四种锁状态的升级——多线程面试必问!
一、背景在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级。注意:锁可以升级但不能降级。转载 2020-06-02 17:34:33 · 652 阅读 · 0 评论