黑马程序员技术交流社区

标题: 深入Java虚拟机-JVM运行机制 [打印本页]

作者: 沉湎码海    时间: 2017-2-17 22:18
标题: 深入Java虚拟机-JVM运行机制
深入Java虚拟机-JVM运行机制-讲02


1.Java栈-操作数栈

        -Java没有寄存器,所有参数传递使用操作数栈。
       
       
2.Java栈-栈上分配  (这是JVM的一种优化机制)
               
                -小对象(一般几十个bytes),在没有逃逸的情况下,可以直接分配在栈上。
               
                -直接分配在栈上,可以自动回收,减少GC压力(因为随着方法的结束,会有弹栈动作,所以栈上的东西,随着方法的结束,而消失)
               
                -大对象或者逃逸对象无法在栈上分配。
               
               
               
               
               

3.方法本身是存储到方法区的。




4.内存模型:

                -  每一个线程有一个工作内存和主内存
               
               

               
5.可见性

        -一个线程修改了变量,其他线程可以立即知道。
       
        -保证可见性的方法:
       
                - volatile  
                -synchroized (unlock之前,写变量值回主存)
           -final (一旦初始化完成,其他线程就可见)

          
          
          
6.指令重排
        -线程内串行语义
       
        编译器不考虑多线程之间的语义。
       
  -指令重排 -破坏线程间的有序性




7.保证有序性的方法-加同步 synchronized  


8.指令重排的基本原则:

                        .  程序顺序原则  :  一个线程内保证语义的串行性。
                        .   volatile规则 : volatile变量的写,先发生于读
                        . 锁规则                 :  解锁必然发生在随后的加锁前
                       
                        . 传递性  :     A优先于B,B优先于C,那么A必然优先于C
                       
                        . 线程的start 方法先于它的每一个动作。
                       
                       
                    .线程的所有操作先于线程的终结(Thread.join())
                       
                        . 线程的中断(interrupt())先于被中断线程的代码
                       
                        .对象的构造函数执行结束先于 finalize()方法
                       
                       
9.字节码执行的两种方式:

                方式一 :  解释执行
                                                - 解释执行以解释方式运行字节码
                                                -解释执行的意思是: 读一句执行一句。
                                               
                方式二 :  编译执行(JIT)
                                                - 将字节码编译成机器码
                                                -直接执行机器码
                                                -运行时编译
       
                                        -编译后能有数量级的提升。
                                       


注意:  编译执行的效率会是解释执行效率的10倍以上。

                                       
10.

        先找config 文件,然后由config文件找dll,在这个dll里面会执行一些接口去初始化整个虚拟机,找到main函数,开始执行。
       
       
11.







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2