jvm-6

  • Post author:
  • Post category:其他


  1. 即时编译器(JIT)和解释器的区别:解释器将字节码转为机器码,下次遇到得重新转,JIT将一些字节码编译为机器码,并存入code cache,下次遇到同样的,直接执行,无需再次编译。JIT会根据平台差异,生成平台特定的机器码。hotspot虚拟机的原理
  2. Java内存模型(jmm)定义了一套在多线程读写共享数据时,对数据的可见性、有序性、原子性的规则
  3. java reflection,允许获取自身的信息,并且可以操作类或者对象的内部属性。一般对象的类型在编译期间就会确定下来,jvm通过在运行时候动态加载类来实现反射,此情况下对象的类型在编译期间是未知的
  4. synchronized(object){实现原子操作代码}
  5. 乐观锁和悲观锁,在java中乐观锁常用CAS(compare and swap)实现,需要修改一个对象时,会比较记录的版本和目前该对象的版本是否一致,如果一致就修改,内部实现采用轮询的方式(while true)。悲观锁常用synchronized实现,在修改的过程中会加锁防止其他访问,但此方法资源消耗大,涉及到线程核心态和用户态之间的切换
  6. 乐观锁只能保证对单个变量操作的原子性,当竞争不激烈时,使用乐观锁,悲观锁开销大,当竞争激烈时,使用悲观锁,乐观锁需要不断轮询,开销大
  7. 乐观锁存在aba问题,使用cas修改对象(值为a)时候,另一线程将对象的值修改为b,再修改为a,但是cas仍然认为它没有发生改变,所以cas方法不能仅仅根据值判断是否被修改,一个可行的方法是引入版本号,一旦修改,对象的版本号发生变更



版权声明:本文为weixin_43164504原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。