`
enetor
  • 浏览: 189229 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中方法不要写太长的真正原因

阅读更多

        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中main方法发送httpPost请求

    这里我们将深入探讨如何在Java的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...

    JAVA_API1.6文档(中文)

    java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...

    java建立TCP长链接

    下面将详细介绍如何在Java中建立TCP长连接以及实现心跳机制。 首先,我们需要了解TCP的基本概念。TCP是一种面向连接的、可靠的传输层协议,它提供全双工通信,即数据可以在两个方向上同时传输。在TCP连接建立之前,...

    java获取网络音乐文件时长

    在Java编程中,获取网络音乐文件的时长是一项常见的任务,尤其在开发音乐播放器或者处理音频流的应用中。下面将详细介绍三种不同的方法来实现这一功能。 ### 方法一:使用`BufferedInputStream`和`AudioInputStream...

    java的一些的方法(自己写)。。。,学习笔记

    在Java编程语言中,"java的一些的方法(自己写)。。。,学习笔记"这个标题暗示了我们将会探讨一些自定义的Java方法或者个人实践中的经验总结。这些方法可能涵盖了基础到高级的各种功能,包括数据处理、对象操作、算法...

    java 泛型方法使用示例

    下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...

    Java中素数的写法

    关于Java中素数的概念,及Java代码的写法,写了几种方法

    Java API文档 中文网页版

    Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...

    java 大小写互换

    在Java编程语言中,大小写转换是常见的字符串操作,它涉及到将字符或字符串从大写转换为小写,反之亦然。以下是对这个主题的详细解释: 1. **String类的toLowerCase()方法** `toLowerCase()`是Java `String` 类的...

    Java SE程序 接口中方法部分实现

    Java SE程序 接口中方法部分实现Java SE程序 接口中方法部分实现Java SE程序 接口中方法部分实现Java SE程序 接口中方法部分实现Java SE程序 接口中方法部分实现Java SE程序 接口中方法部分实现Java SE程序 接口中...

    java 中文字转为英文

    java 中文字转为英文java 中文字转为英文java 中文字转为英文

    Java类库中文手册

    这份手册详细介绍了Java标准类库中的各种类、接口、方法和异常,是Java学习者和开发者的得力助手。 在Java编程中,类库是预先编写好的一组类和接口的集合,它们提供了丰富的功能,可以帮助开发者构建高效、稳定的...

    Java接口的实现 操作

    接口中可以定义变量、方法、抽象方法、默认方法和静态方法等。接口的变量都是公共静态的,不能被修改。接口的方法可以是抽象的,也可以是默认的或静态的。 在本例中,我们设计了一个员工类(Employee),该类实现了...

    Java实现Socket长连接和短连接

    在Java编程中,Socket是网络通信的基础,它允许两个应用程序通过TCP/IP协议进行数据传输。Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short ...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java实现大小写字母转化

    从键盘输入任意一个英文字母,大写的转成小写的然后输出,小写的转成大写的然后输出。用Character的静态方法isUpperCase(char ch)判断是否大写字母,isLowerCase(char ch)判断是否小写字母

    Java代码实现中文与ASCII互相转换

    Java自定义实现本地语言与ASCII之间的互相转换。可在开发项目中直接调用的工具类。

    通过java类的路径实例化类并调用方法

    通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法

    java操作mysql数据库,不写sql语句版

    而Spring JDBC则通过JdbcTemplate和NamedParameterJdbcTemplate提供了一种更底层的SQL执行方式,但仍然可以避免直接在代码中写SQL。 5. `DataAccess.java`和`DataPageInfo.java`:这两个文件可能是项目中的关键组件...

    java写日志文件

    java 写日志记录到指定目录下(一天一个文档)

Global site tag (gtag.js) - Google Analytics