![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 66
Be_insighted
强者自救,圣者渡人!
展开
-
锁升级之Synchronized
synchronized锁升级、原理、特性原理部分转载小米技术实验室原创 2023-02-11 13:07:54 · 859 阅读 · 0 评论 -
JVM内存泄漏
内存泄露表现调大堆内存、重启应用发生内存泄漏后,进程的可用内存会慢慢变少,最后的结果就是抛出OOM错误。发生OOM错误后可能会想到是内存不够大,于是把-Xmx参数调大,然后重启应用。这么做的结果就是,过了一段时间后,OOM依然会出现。最后无法再调大最大堆内存了,结果就是只能每隔一段时间重启一下应用。内存泄露将导致GC频繁、请求响应慢因为频繁发生的GC会暂停其它所有线程(Stop The World)造成的,所以内存泄漏的另一个可能的表现是请求的响应时间变长了。内存泄露...原创 2022-01-17 08:06:41 · 303 阅读 · 0 评论 -
1.JVM个参数初始值配置获取,通过设置JVM参数-XX:+PrintFlagsInitial,2.java.lang.OutOfMemoryError: Metaspace
JVM初始值信息,我的机器是8G内存64位的操作系统!JDK版本jdk1.8.0_45原创 2022-01-18 08:32:03 · 471 阅读 · 0 评论 -
java.lang.OutOfMemoryError: unable to create new native thread
为什么会出现高并发请求服务器时,经常出现如下异常: java.lang.OutOfMemoryError: unable to create new native thread准确的讲该native thread异常与对应的平台有关导致原因:后台应用创建了太多线程了,一个应用进程创建多个线程,超过系统承载极限你的服务器并不允许你的应用程序创建这么多线程。对于普通用户,Linux系统默认允许单个进程可以创建的线程数是1024个,你的应用创建超过这个数量,就会报java.lang.OutOfM原创 2022-01-17 08:11:07 · 2299 阅读 · 0 评论 -
Java快速定位排查OOM,OOM区域:堆内存、元空间、本地方法栈、虚拟机栈、直接内存。
1、什么是OOM?java.lang.OutOfMemoryError,即内存溢出。2、哪些内存区域会发生OOM?五个区域会发生OOM:直接内存、元空间、本地方法栈、虚拟机栈、元空间。JVM运行时数据区五个区域中,除了程序计数器不会发生OOM,其他区域都有可能。除了元空间、本地方法栈、虚拟机栈、堆外,还有一块区域大家容易忽略,即直接内存。(紫色)区域线程共有、发生GC;(绿色)线程私有,内存很小,几乎不需要GC程序计数器不会OOM,记录了方法之间的条用和执行情况。存储原创 2022-01-16 11:35:14 · 5798 阅读 · 0 评论 -
JVM的四种垃圾回收算法和七种垃圾收集器
JDK1.8垃圾回收算法发展历程标记-清理 ——> 复制算法 ——> 标记-整理 ——> 分代收集垃圾回收算法标记-清理标记-清除算法老年代回收垃圾算法,分为标记和清除两个阶段,先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象。缺点:标记和清除两个过程效率都不高;标记清除之后会产生大量不连续的内存碎片。为了解决标记清除算法内存碎片化严重的缺陷,提出了复制算法。复制算法复制算法将可用的内存分成两份,每次使用其中一...原创 2021-09-19 09:58:03 · 1017 阅读 · 0 评论 -
Java垃圾回收日志信息、Java进程信息查看命令
jstat -gccause pidJava垃圾回收发生在方法区、堆区!监视Java堆状况,包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息、导致上一次GC产生的原因。S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 O:old代已使用的占当前容量百分比 M:元空间(Metaspace)已使用的占原创 2021-08-30 22:48:52 · 827 阅读 · 2 评论 -
java -jar *****.jar 稳定性测试启动命令、加载配置文件顺序--Dspring.config.location=E:\\iot\\application.properties
java -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:NativeMemoryTracking=detail -Xms2048m -Xmx2048m -jar iot-1.0.0.jar --Dsppring.config.location=E:\\iot\\application.propertiesGC信息可以在打包时配置,如果没配置,启动jar包..原创 2021-08-30 22:38:04 · 587 阅读 · 1 评论 -
Java工程进行性能测试时通常要考虑哪些要素,如何使接口响应时间在毫秒级范围,Java项目如何进行性能测试?0.2s的反应时间内返回响应,用户感知情况较好。附IO密集型和计算密集型性能测试摸底代码
CPU:有的应用需要大量计算,他们会长时间、不间断地占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题。例如,代码递归导致的无限循环,正则表达式引起的回溯,JVM 频繁的 FULL GC,以及多线程编程造成的大量上下文切换等,这些都有可能导致 CPU 资源繁忙。内存:Java 程序一般通过 JVM 对内存进行分配管理,主要是用 JVM 中的堆内存来存储 Java 创建的对象。系统堆内存的读写速度非常快,所以基本不存在读写性能瓶颈。但是由于内存成本要比磁盘高,相比磁盘,内原创 2021-08-27 22:19:37 · 1064 阅读 · 0 评论 -
垃圾回收总结
总结:垃圾回收(1)判断的标准: GC Root: a.被Java虚拟机栈直接或者间接引用的对象 b.被本地方法栈直接或者间接引用的对象 c.方法区的变量或者常量直接引用的对象(2)处理的算法: a.标记-清理算法:在对象后面标记一下,把含有标记的对象给它删除掉。缺点:会产生内存碎片,例如分别删除了2个1k的内存(现在有2个1k的内存是空着了),这时new了1个2k的内存出来,这个时候不能把这个2k的内存放在2个1k的内存里面,而且也不能被拆分,所以这2个1k的内存就不能被合理的利用起.原创 2021-07-25 12:28:07 · 137 阅读 · 0 评论 -
Synchronized初探,无锁到重锁
偏向锁当线程访问同步块并获取锁时处理流程如下:检查mark word的线程 id。 如果为空则设置 CAS 替换当前线程 id。如果替换成功则获取锁成功,如果失败则撤销偏向锁。 如果不为空则检查线程 id为是否为本线程。如果是则获取锁成功,如果失败则撤销偏向锁。持有偏向锁的线程以后每次进入这个锁相关的同步块时,只需比对一下 mark word 的线程 id 是否为本线程,如果是则获取锁成功。如果发生线程竞争发生 2、3 步失败的情况则需要撤销偏向锁。偏向锁撤销偏向锁的撤销动...原创 2020-11-16 22:48:59 · 280 阅读 · 0 评论 -
Java 基础核心知识点
面向对象编程(OOP)Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。封装封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或...原创 2020-10-30 08:25:38 · 586 阅读 · 2 评论 -
JVM 堆内存&垃圾确认&垃圾回收
Java中垃圾确定的方法是:根可达算法 GC Root 对象:虚拟机栈中引用的对象 方法区中的常量对象 方法区中类静态属性引用的对象 本地方法栈中JNI的引用对象 活跃线程的引用对象 垃圾回收算法: 1、标记清除 (Mark and Sweep) 标记: 从根引用扫描,对存活的对象进行标记 清除: 对堆内存从头到尾进行线性遍历,回收不可达对象内存 缺点: 碎片...原创 2020-10-18 22:03:03 · 164 阅读 · 0 评论 -
深入理解Java虚拟机(内存模型、类加载、垃圾回收、触发初始化、垃圾断定) JVM minor GC、FULL GC,G1、CMS、UseParallelGC
深入理解Java虚拟机本文针对JDK 1.8,仅作抛转引玉,因水平有限,文章或许有不足之处,望您不吝指出!什么是JVM?Java虚拟机(Java Virtual Machine)是运行Java字节码的虚拟机!对于不同的操作系统有特定的实现,相同的字节码(*.class 文件),它都会给出相同的结果。*.class 文件 <—— javac 编译源文件一次编译,随处运行字节码 + (不同系统的)虚拟机是实现“一次编译,随处运行”的关键;Java基本类型byte、原创 2020-08-17 17:43:41 · 848 阅读 · 0 评论 -
揭开JVM垃圾回收的神秘面纱?JVM到底用的什么算法去发现垃圾的?附代码及GC日志 堆内存大小设置,垃圾对象会被回收几次?
/** * @Author: Be.insighted * Description: * @date Create on 2020/9/18 15:08 **/public class TestGC { public Object instance; private static final int _1MB = 1024*1024; private byte[] bigsize = new byte[2*_1MB]; public static void te.原创 2020-09-18 16:00:17 · 159 阅读 · 1 评论