`
zhangzhenjj
  • 浏览: 27936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从JVM理解多线程同步和调优(一) - 迫不及待的第一篇

阅读更多

 

多线程同步(一) - 迫不及待的第一篇synchronized

 

        相信大家面试或工作的过程中都遇到过synchronized这个关键字,尤其是面试的过程中,有时回答这类问题自己就虚了,如果没有深入或彻底的研究过这个肯定没信心,所以拿这个作为这个系列的开篇,接下来主要系统的写jvm内存模型、多线程同步和优化,当然来源于看书我还没那个能力去看源码,算是读后感或总结吧,希望对喜欢的兄弟们有所帮助,ok,进正题!

 

        synchronized作为java中的一个关键字,也是我们大家用来线程互斥访问的主要武器,先抛一个问题,下面进行解答,问:synchronized修饰变量、非static方法、static方法的区别?

 

          说明这个问题先从高层次了解下jvm内存模型,这里不说方法区、虚拟机栈、本地方法栈这么细粒度的划分(感兴趣的可以看我之前整理的http://www.evernote.com/shard/s201/sh/2a2d31b5-78a7-46e4-b681-1679572c0244/83cbd41bdbfb61c509bb8100ca03198c),(我擦,有点不好说)上图



 
 大家一看就知道了这是计算机内存模型,那么jvm内存模型和这个很类似,jvm中分为工作内存和主内存,将处理器换做线程、高速缓存换做工作内存就行了,也就是说每个线程都有自己的一个工作内存,全局有一个主内存,那么这个同步的操作就在缓存一致性这里,jvm内存模型定义了八种操作:lock、unlock、read、load、use、assign、store、write,其实
synchronized就对应这里的lock与unlock,为什么说这些,我们编写的代码synchronized最后就映射到这里的lock和unlock,用synchronized修饰的代码,经过编译后会在相应的字节码前后分别添加monitorenter和monitorexit,字节码中这两个关键字就是对lock和unlock的封装。synchronized可以修饰变量或方法,那么如果我们指定了这个对象参数,修饰的就是这个对象的reference,如果没有明确指定,那就根据synchronized修饰的是实例方法还是类方法,去取对应的对象实例或class对象来作为锁的对象,当然最终的同步操作是lock、unlock为我们完成的,这个定义在一致性协议里边。简单的说就是一个线程只有执行了lock后才能执行unlock;一个线程不能执行其它线程的unlock。

 

下一篇写下,java中另外一个关键字volatile,其实用volatile修饰的变量并不能保证多线程同步。

 

 

  • 大小: 34.4 KB
3
3
分享到:
评论
3 楼 freezingsky 2013-07-30  
这个在java并发编程实践里就说得很清楚。包括CAS原语等
2 楼 naoda 2013-07-29  
不错,学习了,期待后续更加精彩的文章!
1 楼 ckgoodness 2013-07-28  

相关推荐

    JVM调优总结 -Xms -Xmx -Xmn -Xss

    其中,-Xms、-Xmx、-Xmn、-Xss 是四个重要的参数,分别控制 JVM 的初始堆大小、最大堆大小、年轻代大小和每个线程的堆栈大小。 堆大小设置是 JVM 调优的重要一步。JVM 的最大堆大小受到三个方面的限制:操作系统的...

    JVM调优总结 Xms -Xmx -Xmn -Xss

    本文将对JVM调优中的几个关键参数进行深入解析,包括-Xms、-Xmx、-Xmn和-Xss等,帮助开发者更好地理解这些参数的作用及如何合理设置。 #### 1. -Xms(Initial Heap Size) - **定义**:设置JVM启动时初始分配给堆...

    JVM的调优总结----------

    ### JVM调优总结 #### 1. JVM配置 在Java应用程序的运行过程中,JVM(Java虚拟机)扮演着至关重要的角色。为了确保应用程序能够高效稳定地运行,正确配置JVM参数至关重要。以下是一些常见的JVM配置参数及其含义: ...

    Jvm调优练习-jvm-tuning.zip

    【标题】"Jvm调优练习-jvm-tuning.zip" 提供了一个实践 JVM(Java Virtual Machine)调优的机会,这是一项至关重要的技能,特别是在处理大型、高性能的Java应用程序时。JVM调优涉及到调整一系列参数,以优化应用程序...

    JVM调优总结

    1.2 JVM调优总结(一)-- 一些概念 4 1.3 JVM调优总结(二)-一些概念 7 1.4 JVM调优总结(三)-基本垃圾回收算法 9 1.5 JVM调优总结(四)-垃圾回收面临的问题 12 1.6 JVM调优总结(五)-分代垃圾回收详述1 14 1.7 ...

    jvm-full-gc调优-jvm-full-gc.zip

    1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存(Non-Heap),其中堆内存又分为新生代(Young Generation)、老年代(Tenured Generation或Old Generation)和持久代(Permanent Generation或...

    jvm调优学习-optimizeJVM.zip

    JVM调优是一个持续的过程,涉及到很多细节和技巧。通过深入理解JVM工作原理,结合具体的应用场景和需求,我们可以逐步调整和优化,以实现最佳性能。"optimizeJVM-develop"中的资料可能提供了从开发阶段就开始考虑JVM...

    JVM调优步骤 - 副本.md

    JVM调优步骤 - 副本

    jvm基础知识与调优-jvm-training.zip

    Java虚拟机(JVM)是Java程序运行...通过深入理解JVM的工作原理,并结合实际应用进行调优,开发者可以提升Java应用的稳定性和性能。这份"jvm-training"资料包将帮助你系统学习这些关键知识点,成为Java性能优化的专家。

    JVM调优测试-jvmDemo.zip

    总的来说,JVM调优是一个综合性的过程,涉及到内存管理、垃圾收集、线程调度等多个方面。通过不断的实践和学习,我们可以更好地理解和优化Java应用在JVM上的运行效率。"JVM调优测试-jvmDemo"这个项目应该就是提供了...

    JVM 调优演示-JVM.zip

    本资料"JVM 调优演示-JVM.zip"包含了一个名为"JVM-master"的项目,我们可以从以下几个方面来探讨JVM调优的相关知识点: 1. **垃圾收集器**:JVM中的垃圾收集器负责自动回收不再使用的对象所占用的内存。不同的垃圾...

    jvm 调优笔记-jvm.zip

    《JVM调优笔记》 Java虚拟机(JVM)是Java...以上内容仅是JVM调优的一部分,实际调优过程需要结合应用特点和性能指标进行细致分析和实验。在实践中,理解JVM的工作原理,结合监控和日志,才能制定出合适的调优策略。

    JVM系列之性能调优参考手册(实践篇).pdf

    标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。JVM作为Java程序运行的基础环境,对程序性能有着决定性影响。本手册的目的是指导开发者如何对JVM进行性能...

    带你全面理解JVM,掌握常规JVM调优-JVM.zip

    通过以上对JVM的理解和调优实践,我们可以有效地提升Java应用程序的性能,减少资源消耗,确保系统的稳定运行。在实际开发中,要结合具体应用的特点和需求,灵活运用这些知识,才能达到最佳的优化效果。

    java虚拟机调优--某培训班的课件与源码

    本资源"java虚拟机调优--某培训班的课件与源码"提供了一套全面的培训材料,旨在帮助开发者深入理解和优化JVM的工作机制。 在Java开发中,JVM调优是一项至关重要的技能,它可以显著提高应用的性能,减少内存占用,...

    JVM下篇:性能监控与调优篇.7z

    本篇文章将深入探讨JVM的性能监控和调优技术。 1. **内存管理**: - **堆内存**:Java对象主要存储在堆内存中,分为新生代(Young Generation)和老年代(Tenured Generation)。新生代用于存放新生的对象,通过...

    用于测试jvm gc调优-share-jvm-gc.zip

    Java虚拟机(JVM)是Java程序运行的基础,它的垃圾收集器(GC)是自动管理内存的核心机制。...这个"share-jvm-gc"项目很可能是为了提供一个实践和学习这些知识的平台,通过实践来加深理解和掌握JVM GC调优的技巧。

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    4. JAVA并发:Java并发编程涉及到多个线程同时运行以提高程序性能,但同时也需要妥善处理线程间同步和互斥问题。Java提供了多种并发工具和机制,如synchronized关键字、volatile关键字、各种锁机制、以及java.util....

    java -jvm 内存分配和jvm调优

    Java JVM(Java虚拟机)内存分配与调优是Java开发者必须掌握的重要技能,它涉及到程序的性能优化和稳定性。在Java应用中,JVM扮演着至关重要的角色,它负责解析字节码、管理内存以及执行线程等。本文将深入探讨JVM...

Global site tag (gtag.js) - Google Analytics