网站大量收购独家精品文档,联系QQ:2885784924

jvm实现机制.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3.2 JVM相关专题: JVM的同步问题 Java程序需要为两种多线程访问程序进行协调: (1)保存在堆中的实例变量 (2)保存在方法区中的类变量 程序不需要协调保存在java栈中的局部变量(因为线程私有)。 JVM为每个对象和类都关联一个锁(mutex),锁住一个类的时候,实际上是锁住该类的Class对象。 编程人员不需要自己动手加锁,对象锁是JVM内部使用的,只需要编写同步语句或者同步方法就可以标志一个监视区域。 synchronized对应的JVM操作码:monitorenter和monitorexit double和long是非原子型的基本类型,数组是非原子型的对象类型 关于volatile:   volatile声明的变量表示保证其必须与主内存保持一致,实际上是变量的同步,主要用于double和long变量前。 3.2 JVM相关专题: JVM的同步问题 synchronized 可作用于实例变量、对象引用、static方法、类名称字面常量; 每个对象只有一个锁(lock)与之相关联。 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁,而且同步方法很可能还会被其他线程的对象访问: 把synchronized当作函数修饰符时:(只锁定该同步方法所在的某个对象) public synchronized void methodA …. 等价于: public void methodA synchronized this ….. 3.2 JVM相关专题: JVM的同步问题    把synchronized用于同步块时: public void method3 SomeObject so synchronized so   …..   这时,锁就是so这个对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序。    但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(必须是一个对象)来充当锁:   class Foo implements Runnable     private byte[] lock new byte[0];?  //特殊的instance变量    public void methodA      synchronized lock …          …..    3.2 JVM相关专题: JVM的同步问题 把synchronized用于static函数时:  Class Foo   // 同步的static 函数   public synchronized static void methodA    ….    等价于:   public void methodB  synchronized Foo.class //? class literal 类名称字面常量        代码中的methodB 方法是把class literal作为锁的情况,它和同步的static函数产生的效果是一样的,取得的锁很特别,是当前调用这个方法的对象所属的类Class,而不再是由这个Class产生的某个具体对象。 3.3 JVM相关专题: JAVA对象创建 一旦一个类被装载、连接和初始化之后,就可以随时使用了。程序可以访问它 静态字段,调用它的静态方法,或者创建它的实例。在Java程序中,类可以被明确 或隐含地实例化。 Java四种显式创建对象 实例化一个类 的方式: 用new语句创建对象 用反射方式,调用Class或Constructor类的newInstance 方法 调用对象的clone 方法 4. 采用反序列化方式,调用ObjectInputStream的readObject 方法 3.3 JVM相关专题: JAVA对象创建 JVM主动使用java类的六种情况: 1. 创建类的新实

文档评论(0)

pndasz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档