在HotSpot虚拟机中使用的是第二种——基于计数器的热点探测方法 , 因此它为每个方法准备了两个计数器:方法调用计数器和回边计数器 。
方法调用计数器用来统计方法调用的次数,在默认设置下,方法调用计数器统计的并不是方法被调用的绝对次数,而是一个相对的执行频率 , 即一段时间内方法被调用的次数 。
回边计数器用于统计一个方法中循环体代码执行的次数(准确地说,应该是回边的次数,因为并非所有的循环都是回边),在字节码中遇到控制流向后跳转的指令就称为“回边” 。
在确定虚拟机运行参数的前提下,这两个计数器都有一个确定的阀值,当计数器的值超过了阀值 , 就会触发JIT编译 。触发了JIT编译后,在默认设置下,执行引擎并不会同步等待编译请求完成,而是继续进入解释器按照解释方式执行字节码,直到提交的请求被编译器编译完成为止(编译工作在后台线程中进行) 。当编译工作完成后,下一次调用该方法或代码时,就会使用已编译的版本 。
由于方法计数器触发即时编译的过程与回边计数器触发即时编译的过程类似,因此这里仅给出方法调用计数器触发即时编译的流程:
java 编译优化问题java编译的结果是字节码而不是二进制 , 所以在运行时vm的优化才是重要的,包括VM的回收策略、分配给VM内存的大小都能在一定程度上影响性能 。Sun的VM支持热点编译,对高频执行的代码段翻译的2进制会进行缓存,这也是VM的一种优化 。
IBM JVM处理数学运算速度最快 , BEA JVM处理大量线程和网络socket性能最好,而Sun JVM处理通常的商业逻辑性能最好 。不过Hotspot的Server mode被报告有稳定性的问题 。
Java 的最大优势不是体现在执行速度上,所以对Compiler的要求并不如c++那样高,代码级的优化还需要程序员本身的功底 。
贴个java的运行参数:
Usage: java [-options] class [args...]
(to execute a class)
orjava [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-clientto select the "client" VM
-serverto select the "server" VM
-hotspotis a synonym for the "client" VM[deprecated]
The default VM is client.
-cp class search path of directories and zip/jar files
-classpath class search path of directories and zip/jar files
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
-Dname=value
set a system property
-verbose[:class|gc|jni]
enable verbose output
-versionprint product version and exit
-version:value
require the specified version to run
-showversionprint product version and continue
-jre-restrict-search | -jre-no-restrict-search
include/exclude user private JREs in the version search
-? -helpprint this help message
-Xprint help on non-standard options
-ea[:packagename...|:classname]
-enableassertions[:packagename...|:classname]
enable assertions
-da[:packagename...|:classname]
-disableassertions[:packagename...|:classname]
disable assertions
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:libname[=options]
load native agent library libname, e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:pathname[=options]
load native agent library by full pathname
-javaagent:jarpath[=options]
load Java programming language agent, see
java.lang.instrument
-Xmixedmixed mode execution (default)
-Xintinterpreted mode execution only
-Xbootclasspath:directories and zip/jar files separated by ;
推荐阅读
- 姓氏头像直播素材,姓氏头像生成器软件更新下载
- 电商如何博取同情赚钱,电商怎么搞起来
- 如何去电脑推广软件给别人,电脑怎么推广
- 百度超级链小程序怎么预约,百度超级链为什么停止了更新
- java代码乘法口诀 java编程乘法口诀表
- c语言程序设计所学内容及收获,c语言程序设计总结与体会
- 手机上的虚拟机在哪,手机上的虚拟机在哪下载
- 鹏鹏为什么没有直播了,鹏鹏现在在哪里直播啊
- 关于vb.netsms通知的信息