![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 76
huapro.vip
不忘初心
展开
-
synchronized底层源码
一、synchronized的使用场景synchronized一般使用在下面这几种场景:修饰代码块,指定一个加锁的对象,给对象加锁public Demo1{ Object lock=new Object(); public void test1(){ synchronized(lock){ } }}修饰静态方法,对当前类的Class对象加锁public class Demo2 { //形式一 public void test1原创 2022-03-11 10:01:18 · 1050 阅读 · 0 评论 -
JVM配置信息
首先先看一下jvm的结构图从上图可以看出jvm的内存主要分了三个部分:堆内存,永久代,栈。对于堆内存和永久代这个是线程共享的。堆内存(Heap)对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。堆内存是所有线程共有的,可以分为两个部分:年轻代和老年代。下图中的Perm代表的是永久代,但是注意永久代并不属于堆内原创 2022-03-02 14:03:58 · 95 阅读 · 0 评论 -
jstack Dump 日志文件中的线程状态
dump 文件里,值得关注的线程状态有:1、死锁,Deadlock(重点关注)死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。2、执行中,Runnable一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。3、等待资源,Waiting on condition(重点关注)1、如果堆栈信息明确是应用代码,则证明该线程正在等待资源。一般是大量读取某资源,且该资源采用了资源锁的原创 2022-03-02 13:58:24 · 199 阅读 · 0 评论 -
JAVA可重入锁死锁
可重入锁可重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的。synchronized 和 ReentrantLock 都是可重入锁。可重入锁的意义之一在于防止死锁。实现原理实现是通过为每个锁关联一个请求计数器和一个占有它的线程。当计数为0时,认为锁是未被占有的;线程请求一个未被占有的锁时,JVM将记录锁的占有者,并且将请求计数器置为1 。如果同一个线程再次请求这个锁,计数器将递增;每次占用线程退出同步块,计数器值将递减。直到计数器原创 2022-03-02 13:01:39 · 492 阅读 · 0 评论 -
JVM内存相关原则
JMM 规定所有变量都存储在主内存,每条线程有自己的工作内存,工作内存中保存被该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作空间进行,不能直接读写主内存数据。不同线程间无法直接访问对方工作内存中的变量,线程通信必须经过主内存。关于主内存与工作内存的交互,即变量如何从主内存拷贝到工作内存、从工作内存同步回主内存,JMM 定义了 8 种原子操作:操作作用变量范围作用lock主内存把变量标识为线程独占状态unlock主内存释放处于锁定状态的变量read原创 2022-02-17 09:40:41 · 62 阅读 · 0 评论 -
jvm调优
虚拟机参数简述:JVM命令支持广泛的选项,可分为以下类别:标准选项 -client -server(默认)非标准选项 -X 显示所有可用-X选项的帮助 高级运行时选项 -XX:ErrorFile=filename高级JIT编译器选项 -XX:+AggressiveOpts 允许jit性能优化高级服务性选项 -XX:+HeapDumpOnOutOfMemory堆栈信息 高级垃圾收集选项 -XX:+CMSClassUnloadingEnabled 使用CMS垃圾收集机制原创 2022-02-15 16:13:50 · 1356 阅读 · 0 评论