想要彻底搞懂Jvm虚拟机,看了这篇就够了
相识了帮助要领执行的 Java 假造机栈的布局后,接下来就要思量 Java 类中要领的挪用了。就像将大象放进冰箱,要领的挪用也不是上来就之间执行要领的,而是分为以下两个步调:
为什么还要加一个要领挪用的步调呢?由于统统要领挪用都是在 Class 文件中以常量池中的标记引用存储的,这就导致了不是我们想要执行哪个要领就能立即执行的,由于我们起首必要按照这个标记引用(着实就一字符串)找到我们想要执行的要领,而这一进程就叫做要领挪用。当找到这个要领之后,我们才会开始执行这个要领,也就是基于栈的表明执行。 想要挪用一个要领,我们先来看一下假造机中有哪些指令可以举办要领挪用:要领挪用字节码指令。 这些字节码会触发差异的要领挪用,总体来说,有以下几种:
确定了要挪用的要领详细是哪一个了之后,就可开始基于栈的表明执行了,这个时辰,要领才真正的被执行。 另外,还必要相识一下 Java 的动态范例说话支持。 说说假造机机能监控及妨碍处理赏罚 常用的 JDK 呼吁行器材:JDK 呼吁行器材。 JVM 常见的参数配置已经配置履历可见:JVM 常见参数配置。 假造机调优案例说明可见:假造机调优案例说明。 说说 JIT 优化 JIT (Just In Time),也就是即时编译,起首我们必要知道 什么是 JIT? 然后,对付 HotSpot 假造机内的即时编译器运作进程,我们可以通过以下 5 个题目来研究它:
另外,JIT 并不是简朴的将热门代码编译成呆板码就收工的,它还会对代码的执行举办优化,首要有以下几种经典的优化技能:
说说 Java 的内存模子(JMM) 这部门内容首要与并发编程的内容相干,以是具体先容会跳到另一个 repo:Java-Concurrency-in-Practice。 Java 的内存模子首要就是研究一个变量的值是怎么在主内存、线程的事变内存和 Java 线程(执行引擎)之间倒腾的。就是说固然 Java 内存模子划定了全部变量都存储在主内存中,可是每个线程都有一个本身的事变内存,内里存着从主内存拷贝来的变量副本,Java 线程要对变量举办修改,都是先在本身的事变内存中举办,然后再把变革同步回主内存中去。 这样做是因为计较机的存储装备和处理赏罚器的运算速率有着几个数目级的差距,以是必要在主内存和 Java 线程间插手一个事变内存作为缓冲,但这也同时会导致主内存和事变内存间的缓存同等性题目,以是当两个事变内存中关于统一个变量的值产生斗嘴时,必要必然的会见法则来确定主内存以奈何的次序同步这个变量,也就是说该听哪个事变内存的。而 Java 的内存模子的首要方针就是界嗣魅这个法则,即假造机怎样将变量存储到内存或是从内存中取出的。 简朴的来讲,就是把握 Java 内存模子中的 8 个原子操纵,而且知道 Java 内存间是怎样通过这 8 个操纵举办变量转达的。 着实 Java 的内存模子就是环绕着在并发的进程中如那里理赏罚 原子性、可见性、有序性 这 3 个特性成立的。同时 Java 除了可以依赖 volatile 和 synchronized 来担保有序性外,它本身自己尚有一个 Happens-Before 原则,依赖这个原则,我们就可以判定并发情形下的两个操纵是否也许存在斗嘴了。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |