`

JVM同步浅析

阅读更多

(所有类的实例或数组,一种实现:分为句柄池和对象池(方便对象移动改变,但有两个指向),对象的引用就是指向句柄池,句柄池有两部分:一个是对象实例;一个是方法区中类的信息。对象池,当然放的是对象实例。第二种实现:直接指向一组数据,数据中包含所有-对象实例和方法区中类的信息)

 

方法区

(被装载类型的信息,如字段信息,方法信息,除常量外的类属性,classLoader的引擎,class类的引用)

 

(jvm会为每个线程分配一个栈,栈是分为栈帧,每调用一个方法就压入一个新栈帧,作为当前帧,使用)

 

栈帧

(栈帧由局部变量区,操作数栈,栈帧数据区组成。局部变量区,操作数栈都是有一个以字长为单位的数组组成

局部变量区是用索引来访问,操作数栈有压栈出栈操作调用。栈帧包含一些栈帧常量池,异常派发机制)

java的堆和方法去是所有线程共享的,栈所属一个线程,他们的实际物理空间都可以不连续,分配的物理空间

大小一般由方法区中的信息决定。这里栈一般分配到新生代E 的1%。

 

java通过监视器机制实现同步,堆和方法区是线程共享的,栈是一个线程独有的。

监控过程未:

 

进入monitor

获得monitor

持有monitor

释放monitor

离开monitor

 

在功能上,同步分为两方面:互斥和协作

互斥是用只允许一个进程计入监控器区域,其他需要在等待区实现的。

协作是用wait notify实现

每个类和对象都有一个监控器。

 

 

对象锁

重入性,jvm维护一个计数器,当线程获得锁,记录为1,只允许这个线程加锁。当计数器为0时,表示没有对象持有锁。

java内部锁 synchronize 

在进入同步块时,进入块时调用monitorenter 出同步块调用monitorexit

同步方法 , 则在解析方法符号时,判断出需要调用对象锁(如果是类方法,就调用类锁)

 

java包下的一些好东西

http://rdc.taobao.com/team/jm/archives/414

在贴一个将lock的

http://suo.iteye.com/blog/1331312

 

 

 

 

分享到:
评论

相关推荐

    浅析JVM逃逸的原理及分析

    JVM 逃逸是 Java 虚拟机(JVM)中的一种优化技术,用于减少 Java 程序中的同步负载和内存堆分配压力。逃逸分析是 JVM 中的一种跨函数全局数据流分析算法,能够分析出一个新的对象的引用的使用范围,从而决定是否要将...

    浅析JVM垃圾回收的过程

    这一过程可能与GC Roots的枚举同步进行,也可能在并行或并发模式下执行。不同GC算法对标记过程有不同的处理方式,如: - 标记-清除算法:标记存活对象,然后清除未标记的对象。 - 标记-整理算法:标记后,将存活...

    技术浅析.pdf 知识领域 Javase javaee Java技术浅析 技术关键词 JAVA语言 编程技术框架 原理

    Java技术浅析 Java是一种广泛应用于企业级项目开发的编程语言,它具有强大的功能和灵活的特性,使其成为开发大型项目的首选语言。Java技术浅析主要介绍了Java语言的技术关键词、编程技术框架、原理等知识点。 一、...

    深入Java单例模式浅析

    枚举实例在JVM加载时自动初始化,所以它是一种静态初始化的单例。 总结: 单例模式在Java中有很多实现方式,每种方式都有其优缺点。选择哪种实现取决于具体的需求,例如性能、线程安全性和代码简洁性。在实际开发中...

    浅析JAVA多线程.pdf

    当线程被创建并启动后,它首先处于新建状态,调用start()方法会将其变为就绪状态,等待JVM分配CPU时间片。一旦获得时间片,线程就会进入运行状态。如果线程执行过程中遇到阻塞条件(如sleep()、wait()或同步锁),则...

    Java中堆内存与栈内存分配浅析

    Java中的内存管理主要涉及到堆内存(Heap)和栈内存(Stack),这两者在程序执行时承担着不同...此外,理解Java内存模型对于解决并发问题也至关重要,因为多线程环境下,堆内存的共享特性可能导致数据竞争和同步问题。

    浅析java volatitle 多线程问题

    Java中的`volatile`关键字在多线程编程中扮演着至关重要的角色,它是Java内存模型(JMM)的一部分,用于处理并发环境中的数据同步问题。在理解`volatile`的关键作用前,我们先要了解Java内存模型的基本概念。在JVM中...

    学习笔记

    4. **HashMap存储结构浅析** HashMap是Java中常用的数据结构,用于存储键值对。它基于哈希表实现,提供O(1)的平均查找时间。深入理解HashMap的内部工作,包括哈希函数、链表和红黑树的转换,对于提高代码效率有帮助...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载4.zip

    10-1 jvm内存模型.mp4 10-2 先行发生原则 happens-before.mp4 10-3 指令重排序.mp4 11-1 数据同步接口--需求分析.mp4 11-2 中间表设计.mp4 11-3 基础环境搭建.mp4 11-4 生产者代码实现.mp4 11-5 消费者编码...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载2.zip

    10-1 jvm内存模型.mp4 10-2 先行发生原则 happens-before.mp4 10-3 指令重排序.mp4 11-1 数据同步接口--需求分析.mp4 11-2 中间表设计.mp4 11-3 基础环境搭建.mp4 11-4 生产者代码实现.mp4 11-5 消费者编码...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载3.zip

    10-1 jvm内存模型.mp4 10-2 先行发生原则 happens-before.mp4 10-3 指令重排序.mp4 11-1 数据同步接口--需求分析.mp4 11-2 中间表设计.mp4 11-3 基础环境搭建.mp4 11-4 生产者代码实现.mp4 11-5 消费者编码...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载.zip

    10-1 jvm内存模型.mp4 10-2 先行发生原则 happens-before.mp4 10-3 指令重排序.mp4 11-1 数据同步接口--需求分析.mp4 11-2 中间表设计.mp4 11-3 基础环境搭建.mp4 11-4 生产者代码实现.mp4 11-5 消费者编码...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载1.zip

    10-1 jvm内存模型.mp4 10-2 先行发生原则 happens-before.mp4 10-3 指令重排序.mp4 11-1 数据同步接口--需求分析.mp4 11-2 中间表设计.mp4 11-3 基础环境搭建.mp4 11-4 生产者代码实现.mp4 11-5 消费者编码...

    Java基础知识点 - 内容比较全面

    6. **Java中的synchronized使用**:synchronized用于实现线程同步,可以修饰方法或代码块,确保同一时刻只有一个线程执行特定代码,防止数据不一致。 7. **Java中的反射机制**:反射允许程序在运行时检查类、接口、...

    浅析Java中线程的创建和启动

    这会触发`run()`方法的执行,但请注意,`run()`方法不会立即执行,而是由JVM调度在适当的时机执行。直接调用`run()`方法只会以普通方法的方式执行,不会创建新的线程。 在`FirstThread`的`main`方法中,当`i==20`时...

    Java多线程文章系列.pdf

    - JVM层面实现`synchronized`的关键字。 #### 十、Java中利用管道实现线程间的通讯 - **管道创建与使用**: - 创建管道对象,如`Pipe`。 - 通过`sink()`和`source()`方法实现数据传输。 #### 十一、实战Java多...

    JNI资源汇总

    JNI是一个规范,它定义了Java虚拟机(JVM)如何与本地代码(通常为C/C++)交互。通过JNI,Java程序员可以调用本地方法,反之,本地代码也可以调用Java方法。 2. **JNI的用途**: - **性能提升**:对于计算密集型...

    JSTL详细标签库介绍

    <BR>3、常见异常实例包括:数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出异常处理功能:主要处理一些同步异常(除数为0),不宜处理一些异步事件(Disk I/O End、网络信息到达、点击...

Global site tag (gtag.js) - Google Analytics