`
enetor
  • 浏览: 188513 次
  • 性别: 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中给自己写的方法增加注释

    本篇文章将详细讲解如何在Java中给自己写的方法添加注释,以便于日后查阅和理解。 首先,我们了解Java中的三种基本注释方式: 1. 单行注释(//):这是最常用的注释方式,适用于单行的描述。 ```java // 这是一个...

    java中main方法发送httpPost请求

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

    java获取网络音乐文件时长

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

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

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

    java 泛型方法使用示例

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

    Java中素数的写法

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

    83.java中String构造方法.zip

    83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中...

    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调用C语言写的dll的方法和实例

    JNI 是Java平台标准的一部分,允许Java代码和其他语言写的代码进行交互。本文将深入探讨如何在Java中调用C语言编写的DLL,并通过一个具体的实例来演示这一过程。 首先,理解JNI的基本概念至关重要。JNI为Java开发者...

    后端+Java+使用java写对联

    后端+Java+使用java写对联后端+Java+使用java写对联后端+Java+使用java写对联后端+Java+使用java写对联后端+Java+使用java写对联后端+Java+使用java写对联后端+Java+使用java写对联后端+Java+使用java写对联后端+...

    tomcat启动执行java自定义方法

    tomcat启动时执行java自定义方法,一般用于启动时赋值情况。

    java编程计算有效工作时间的方法.java

    java编程计算有效工作时间的方法.java

    Java接口的实现 操作

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

    Java类库中文手册

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

    Java实现Socket长连接和短连接

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

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

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

    一个java文本文件读写类

    在Java编程语言中,文件操作是一项基础且重要的任务。这里我们关注的是一个名为"TextFile"的Java类,它提供了对文本文件进行读写的功能。JavaBean是一种特殊类型的Java类,设计用于数据封装和组件重用,通常遵循特定...

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

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

    Java的socket长连接实例

    在Java编程中,Socket通信是网络编程的基础,它允许两台计算机通过TCP/IP协议进行双向通信。本实例将深入探讨如何实现一个Java的Socket长连接。长连接是指在客户端和服务端建立连接后,保持连接状态,多次进行数据...

Global site tag (gtag.js) - Google Analytics