![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
yxh13521338301
只分享干货的码农
展开
-
被解刨的JVM
作为java应用程序的基层员工,JVM总是默默无闻地辛苦工作。年近尾声,年度评优工作开始进展。往年都是框架、并发等员工当选,咱不能总让老实人吃亏。综合解剖一下JVM,看看它做了哪些了不起的事情。(主要针对java内存结构做分析)一、类加载过程Java应用程序是不能直接运行的,需要通过java complier进行编译,将其转为class字节码文件,然后交由不同环境的JVM进行运行。那么,JVM到底是干什么的呢?它如何做到存放或创建实例对象的?又是如何进行对象内存回收?别着急,我们先看看这位员工.原创 2020-12-17 16:51:15 · 281 阅读 · 0 评论 -
实战解决生产环境OOM的问题
需要先来一波小小的吐槽,OOM真特么坑爹啊!!!各种原因都有可能导致OOM!!而且如果根据程序抛出的异常来定位问题,无异于大海捞针!!为了帮助大家避免弯路,分享一下自己处理OOM的过程和心得。怀着开机混底薪的轻松心疼走进办公室沏了一杯茶,打开CSDN浏览大家的佳作。突然钉钉中出现很多吐槽的声音,原来运营同事陆陆续续接到很多用户的投诉,反应系统卡慢甚至503问题。妈的,愉快的一天从接到BUG开始走向结束。远程连接服务器查询Tomcat日志,吃惊的发现出现大量OOM的异常信息,...原创 2020-09-02 17:27:01 · 805 阅读 · 0 评论 -
Synchronized的花花肠子
对于久经沙场的Java老手来说,锁的概念一定如雷贯耳。毕竟,在打赢并发和多线程的战役中,锁可谓举足轻重。伴随技术领域的推进,系统架构逐渐演变为微服务,锁的范围超脱单个JVM的管理,分布式锁开始替代传统JVM锁,崭露头角。凭借自身的灵活和高逼格的技术栈,收到大家的一致追捧。但由浅入深,JVM锁不意味着过时与淘汰,相反,它在众多业务中还是那么不可替代。JVM锁的家族中,Synchronized一骑红尘,广为流传。本文,帝都的雁就来为读者盘点Synchronized的那些花花肠子。(PS:需要有Java对...原创 2020-08-21 16:57:52 · 309 阅读 · 0 评论 -
volatile与JMM的那些恩怨情仇
源于蚂蚁课堂的学习,点击这里查看(老余很给力)一、前言谈起volatile,想必大家最多的影响无非其三大特性:线程可见性、防止指令重排序以及不能保证原子性。当然,初学者对于这些特性多数只能做到死记硬背,应付面试。工作中对于其真正的原理及实现方式,可能甚至还达不到一知半解。而若要对volatile的原理娓娓道来,需要先引入它的老冤家JMM了。二、JMMJMM(Java Memory Model),即Java内存模型。其主要是按照CPU的工作方式,将内存空间模型化。如下图:...原创 2020-08-12 16:16:56 · 436 阅读 · 0 评论 -
java类加载过程
前言作为Java应用程序的开发,我们主要还是去写java代码,java文件对于JVM来说是陌生的,故需要编译器javac通过自身的机制如词法分析、语法分析等将.java文件编译为.class文件。 那么class字节码又是如何加载至JVM内存呢加载Load根据当前类字节码的全路径名称去所有数据源(如:jar)中查找此类,找到后将其映射为JVM认可的java.lang.Class对象连接Linked验证校验当前Class的一些编译上的信息,判断其是否符合JVM..原创 2020-07-16 09:52:32 · 203 阅读 · 0 评论 -
JVM常用的调优参数
源于蚂蚁课堂的学习,点击这里查看(老余很给力)通用JVM参数-server 如果不配置该参数,JVM会根据应用服务器硬件配置自动选择不同模式,server模式启动比较慢,但是运行期速度得到了优化,适合于服务器端运行的JVM-client 启动比较快,但是运行期响应没有server模式的优化,适合于个人PC的服务开发和测试-Xmx 堆内存最大值,默认是机器物理内存的1/4-Xms 堆内存最小值,默认情况是机器物理内存的1/64,(最大和最小...原创 2020-06-04 15:39:11 · 668 阅读 · 0 评论 -
Java内存泄漏和内存溢出
源于蚂蚁课堂的学习,点击这里查看(老余很给力)内存溢出方法入栈后,其中的局部变量逐渐增长,一直不释放,导致堆内存满了,无法存放新对象,使得方法抛出内存溢出的异常。方法由于异常而出栈,方法中的对象也就失去引用,对象被回收,堆内存回复正常,其他方法可以正常访问。内存泄漏类似于内存溢出的缘由,但不同的时,它不是方法入栈后的局部变量,而是一直处于活跃状态的对象持续增长内存。比如springIOC中的对象,它有个属性List,当我们不停往LIST放入数据,一定会出现内存溢出的问...原创 2020-06-04 14:13:09 · 200 阅读 · 0 评论 -
Java垃圾回收器
源于蚂蚁课堂的学习,点击这里查看(老余很给力)young GC(minor GC)新生代的gcSerial串行收集,在执行垃圾回收的时候,会暂停用户线程,即STW(stop the world)Parnew并行收集,多核处理器的情况下不会发生用户线程停止的现象Parallel Scavenge(PS)关注于用户的吞吐量: 用户线程执行时间/(用户线程执行时间+gc执行时间)old GC(major GC)老年代的gc...原创 2020-06-04 14:04:49 · 162 阅读 · 0 评论 -
Java垃圾回收算法
源于蚂蚁课堂的学习,点击这里查看(老余很给力)分代将堆分为新生代和老年代,默认比例是1:2新生代中由会根据gc收集之后的存活率分为Eden区和S0、S1区,默认比例是8:1:1 eden区:用于存放刚创建出来的对象,默认年龄是0 s0和s1:用于存放未满15岁但还处于存活状态的对象,用于复制算法老年代的对象类型有: 年龄超过15岁; 新生代创建的特别大的对象(新生代放不下它) 空间担保的对象(并发时,新生代对象太多放不下了,这些对象会在老年代能...原创 2020-06-04 10:39:01 · 166 阅读 · 0 评论 -
Java内存结构
源于蚂蚁课堂的学习,点击这里查看(老余很给力)方法区(元空间)-- 线程共享存放class的信息、静态数据、常量池等堆 -- 线程共享存放new出来的对象栈 -- 线程独占栈帧组成,先进后出栈帧: 局部变量表 操作数栈 动态链接 返回地址局部变量表存放局部变量的引用操作数栈栈中进行数据运算时所需的空间,也可以称之为表达式栈动态链接一个指向运行时常量池中该栈...原创 2020-06-03 17:51:54 · 135 阅读 · 0 评论