java中一般建议一个方法不要写的过长,不方便维护和阅读是其中的一个原因,但是其真正性能的原因大家知道吗?
我们知道,JVM一开始是以解释方式执行字节码的。当这段代码被执行的次数足够多以后,它会被动态优化并编译成机器码执行,执行速度会大大加快,这就是所谓的JIT编译。
hotsopt源码中有一句
if (DontCompileHugeMethods && m->code_size() > HugeMethodLimit) return false;
当DontCompileHugeMethods=true且代码长度大于HugeMethodLimit时,方法不会被编译。
DontCompileHugeMethods与HugeMethodLimit的值在globals.hpp中定义:
product(bool, DontCompileHugeMethods, true,
"don't compile methods > HugeMethodLimit")
develop(intx, HugeMethodLimit, 8000,
"don't compile methods larger than this if +DontCompileHugeMethods")
上面两个参数说明了Hotspot对字节码超过8000字节的大方法有JIT编译限制,这就是大方法不会被JIT编译的原因。由于使用的是product
mode的JRE,我们只能尝试关闭DontCompileHugeMethods,即增加VM参
数”-XX:-DontCompileHugeMethods”来强迫JVM编译大方法。但是不建议这么做,因为一旦Code Cache满了,HotSpot会停止所有后续的编译任务,虽然已编译的代码不受影响,但是后面的所有方法都会强制停留在纯解释模式。
分享到:
相关推荐
本篇文章将详细讲解如何在Java中给自己写的方法添加注释,以便于日后查阅和理解。 首先,我们了解Java中的三种基本注释方式: 1. 单行注释(//):这是最常用的注释方式,适用于单行的描述。 ```java // 这是一个...
这里我们将深入探讨如何在Java的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...
java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...
在Java编程中,获取网络音乐文件的时长是一项常见的任务,尤其在开发音乐播放器或者处理音频流的应用中。下面将详细介绍三种不同的方法来实现这一功能。 ### 方法一:使用`BufferedInputStream`和`AudioInputStream...
在Java编程环境中,处理音频文件,特别是AMR(Adaptive Multi-Rate)格式的语音文件,通常涉及到多媒体处理和音频编码解码的知识。AMR是一种广泛用于移动通信中的音频编码格式,尤其在电话录音和语音消息中常见。...
此外,接口中的默认方法和静态方法也是Java 8的新特性。默认方法允许在接口中定义实现,而静态方法则为工具类提供了便利。这些改变使得接口不仅可以定义行为,还可以包含实现,而静态方法则不需要创建接口实例即可...
在Java编程语言中,大小写转换是常见的字符串操作,它涉及到将字符或字符串从大写转换为小写,反之亦然。以下是对这个主题的详细解释: 1. **String类的toLowerCase()方法** `toLowerCase()`是Java `String` 类的...
Java 视频流读写是Java编程中涉及多媒体处理的一部分,主要目的是为了在应用程序中处理、播放或存储视频数据。Java Media Framework (JMF) 是Java平台上的一个关键组件,用于处理音频、视频和流媒体内容。在这个"JMF...
java 中文字转为英文java 中文字转为英文java 中文字转为英文
Java是一种跨平台的编程语言,但在与底层操作系统交互时,比如调用Windows系统的动态链接库(DLL)中的方法,就需要一些特殊的工具和技术。本实例主要介绍如何使用Java和jawin库来实现DLL方法的调用。 jawin是一个...
Java 8在接口中引入了默认方法,允许接口定义方法实现。这使得接口可以添加新的功能而不破坏已有的实现。例如,`Collection`接口新增了`default void forEach(Consumer<? super E> action)`方法。 **5. 并行流...
在Java编程中,Socket是网络通信的基础,它允许两个应用程序通过TCP/IP协议进行数据传输。Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short ...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
在标题《kettle中调用java类》示例代码中,我们关注的是如何在Kettle的转换或作业中嵌入Java代码,以实现更复杂的数据处理逻辑。 首先,Kettle支持两种方式来调用Java类:使用“Java Class”步骤和使用“Execute ...
从键盘输入任意一个英文字母,大写的转成小写的然后输出,小写的转成大写的然后输出。用Character的静态方法isUpperCase(char ch)判断是否大写字母,isLowerCase(char ch)判断是否小写字母
### Java Socket 长连接客户端和服务端实现 在Java中,使用Socket进行网络通信是一种非常常见的技术手段。本文将详细解读“Java Socket长连接客户端服务端(标准实例)”的相关知识点,包括其实现原理、代码解析及...
Java自定义实现本地语言与ASCII之间的互相转换。可在开发项目中直接调用的工具类。
Java版本的NetCDF库使得开发者能够在Java环境中方便地进行NetCDF文件的读取和写入操作。 1. **NetCDF简介** - NetCDF是一种通用的数据模型,不仅定义了数据结构,还包含了元数据,用于描述数据的含义和布局。 - ...
而Spring JDBC则通过JdbcTemplate和NamedParameterJdbcTemplate提供了一种更底层的SQL执行方式,但仍然可以避免直接在代码中写SQL。 5. `DataAccess.java`和`DataPageInfo.java`:这两个文件可能是项目中的关键组件...