Java连载29-方法执行内存分析、方法重载

一、JVM包含三个内存区:栈内存、堆内存、方法区内存

二、注意点

(1)在MyEclipse中字体是红色的是一个类的名字,并且这个类除了我们自定义的类是JavaSE类库中自带的

(2)其实JavaSE类库中自带的类,例如:String.class\System.class,这些类的类名也是标识符

(3)只要是类名就一定是标识符

内存分析举例:

public class D29_{

  public static void main(String[] args) {

    int a = 10;

    int b = 20;

    int retValue = sunInt(a,b); 

    System.out.println(retValue);   

  }

  public static int sumInt(int i ,int j) {

    int result = i + j;

    int num = 3;

    int retValue = divide(result,num);

    return retValue;   

  }

  public static int divide(int x,int y) {

    int z = x/y;

    return z;

  }

}



三、方法重载

1.以下代码不使用“方法重载机制“,不使用overload,分析存在的缺点

public class D29_{

?

  public static void main(String[] args) {

    int result1 = sumInt2(1,2);

    System.out.println(result1);

    double result2 = sumDouble(1.0,2.0);

    System.out.println(result2);

    long result3 = sumLong(1L,2L);

    System.out.println(result3);

  }

  public static int sumInt2(int a, int b) {

    return a+b;

  }

  public static double sumDouble(double a,double b) {

    return a+b;

  }

  public static long sumLong(long a ,long b) {

    return a+b;

  }

}

缺点:(1)上面定义的方法功能虽然都不相同,但是功能都是类似的,就是求和,对于我们来说三种方法名字太多不好记,调用不方便,记忆难(2)不美观

需求机制:功能虽然不同,但是功能相似的时候,可以使用这些方法的时候,就想在使用同一种方法一样,后民安编写代码方便,也不需要记忆过多方法名,代码美观,这种机制就是方法重载(overload)

2.改写代码,具体解析下次更新再说。

public class D29_{

  public static void main(String[] args) {

    //调用方法的时候像在使用一个方法一样

    //参数的类型不同,对应调用的方法不同

    //此时区分方法不再依靠方法名依据的是参数的数据类型

    System.out.println(sum(2,7));

    System.out.println(sum(2.0,7.0));

    System.out.println(sum(2L,7L));

  }

  public static int sum(int a,int b) {

    return a+b;

  }

  public static double sum(double a ,double b) {

    return a+b;

  }

  public static long sum(long a,long b) {

    return a+b;

  }

}

四、源码:

D29_method_overload_and_perform_memory_analysis.java

地址:

https://github.com/ruigege66/Java/blob/master/D29_method_overload_and_perform_memory_analysis.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

原文地址:https://www.cnblogs.com/ruigege0000/p/11509699.html

时间: 2024-11-05 04:52:11

Java连载29-方法执行内存分析、方法重载的相关文章

Linux下java进程CPU占用率高分析方法

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running

面向过程分析方法与面向对象分析方法到底区别

个人理解面向过程分析方法,就是相当于流水线作业,它的关注点是事件的具体过程,比如大学生一天的事情就是,起床->洗脸.刷牙->吃早餐->上课->吃午饭->午休->上课->吃晚饭->做作业.消遣->睡觉,面向过程注重模块化,比如,吃饭模块,睡觉模块等等,它的流程清晰便于组织. 而面向对象的分析方法,侧重于对象,而不是流程,通俗一点就是不注重流程,还是大学生一天的做的事情,用面向对象的方法就会抽象出一个大学生的类,这个类包含了大学生的属性和行为,比如大学生能

判断方法执行是否超时方法

#region 判断方法执行是否超时 /// <summary> /// 判断方法是否超时,适合无参数方法 /// </summary> /// <param name="action">方法名称</param> /// <param name="timeoutMilliseconds">超时时间限定</param> private void CallWithTimeout(Action act

Java - 用户在线的数据库实现方法和内存实现方法

一,数据库实现方法:(实现思路:基于Struts2.0的拦截器) 0,流程:struts.xml ->  ApplicationContext.xml  ->  LoginInterceptor.java ->  OnlineAction.java ->  Online.ftl 1, struts.xml: <action name="index" class="indexAction">             <resu

【第二周作业】面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

书上的一些概念这里不再复述,仅谈谈自己通过阅读教材.上课听讲后自己的一些理解: 面向过程分析方法注重自顶向下,逐层分析,把整个软件系统的功能逐布分解,各个击破.可以用生活中的一个例子来加以理解——去食堂吃饭.到达食堂(比如琴湖食堂)后,要遵从排队——打饭——阿姨打菜——拿筷子——找位子坐好——开吃,整个过程强调顺序性,比如不拿筷子就坐下是不行的,除非拿手抓.面向过程就是将软件系统所需要实现的功能按照以上类似的思路逐步细分,一步一步要做什么都要分析清楚. 面向对象分析方法则注重分析整个系统的逻辑结

面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

结构化分析方法的分析步骤:1 理解和分析当前的现实环境 已获得当前系统的具体模型 2 建立当前系统的逻辑模型 3 建立目标系统的逻辑模型 4 进一步完善目标系统的逻辑模型 面向对象分析方法:根据面向对象的过程模型 面向对象的需求分析从概念上分为问题分析和应用分析两个方面  问题分析:主要收集并确认用户需求 最后将信息链接最终建立关于对象的分析模型 应用分析:主要是动态描述系统中对象的合法状态序列 并用动态模型表达对象的动态行为 对象之间的消息传递和协同工作的动态信息 综上:结构化分析方法是先创建

面向过程分析方法和面向对象分析方法区别到底在哪里

1.对它们的解释 面向过程分析方法是结构化的,这种分析方法具有结构化的特点,从整体的角度来思考建模过程,如要创建一个图书馆借书管理系统,整体地来布局设计思路,分析图书的收藏与借阅整个工作流程,具有宏观性,但抽象度很高,不易于理解, 面向对象分析方法是具体的,如借书者是一个类,某一具体的借书人是一个对象,他能行使的权力相当于方法,就是所说的方法或者是操作 2.一些区别 它们是从不同的角度来思考解决问题的方法的,一个是整体性,一个是具体到某一个具体的对象,在建模时应充分考虑两种分析方法各自的优势来选

Linux下java进程CPU占用率高-分析方法

今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4%  mem:14.6% 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top 一下 可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138 2. 找出消耗资源最高的线程 top -H -p  29580 

Redis内存分析方法

一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析. BGSAVE:在后台异步(Asynchronously)保存当前数据库的数据到磁盘. BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出. 生成内存快照:redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,