精华内容
下载资源
问答
  • java 统计每行代码执行时间

    千次阅读 2020-01-14 15:10:10
    使用工具 https://github.com/LinShunKang/MyPerf4J 直接下载 ... 下载后解压 执行命令 java -javaagent:MyPerf4J-ASM-2.10.0-SNAPSHOT.jar -DMyPerf4JPropFile=MyPerf4J.propert...

    使用工具

    https://github.com/LinShunKang/MyPerf4J

    直接下载

    https://pan.baidu.com/s/1IljY1X4dyxYzCQ_ASoDvpw

    下载后解压

    执行命令

    java -javaagent:MyPerf4J-ASM-2.10.0-SNAPSHOT.jar -DMyPerf4JPropFile=MyPerf4J.properties -jar myproject-1.0.0.jar

    生成日志

     

    配置文件

    展开全文
  • 一行 Java 代码是怎么执行的。

    千次阅读 2019-04-03 09:06:52
    一行代码能够执行,必须要有可以执行的上下文环境,包括,指令寄存器,数据寄存器,栈空间等内存资源,然后这行代码必须作为一个执行流能够被操作系统的任务调度器识别,并给他分配 CPU 资源,当然这行代码所代表的...

    一行代码能够执行,必须要有可以执行的上下文环境,包括,指令寄存器,数据寄存器,栈空间等内存资源,然后这行代码必须作为一个执行流能够被操作系统的任务调度器识别,并给他分配 CPU 资源,当然这行代码所代表的指令必须是 CPU 可以解码识别的,所以一行 Java 代码必须被解释成对应的 CPU 指令才能执行。下面我们看下System.out.println("Hello world")这行代码的转译过程。

    Java 是一门高级语言,这类语言不能直接运行在硬件上,必须运行在能够识别 Java 语言特性的虚拟机上,而 Java 代码必须通过 Java 编译器将其转换成虚拟机所能识别的指令序列,也称为 Java 字节码,之所以称为字节码是因为 Java 字节码的操作指令(OpCode)被固定为一个字节,以下为 System.out.println("Hello world") 编译后的字节码

    0x00:  b2 00 02         getstatic  Java .lang.System.out
    0x03:  12 03            ldc "Hello, World!"
    0x05:  b6 00 04         invokevirtual  Java .io.PrintStream.println
    0x08:  b1               return
    

    最左列是偏移;中间列是给虚拟机读的字节码;最右列是高级语言的代码,下面是通过汇编语言转换成的机器指令,中间是机器码,第三列为对应的机器指令,最后一列是对应的汇编代码

    0x00:  55                    push   rbp
    0x01:  48 89 e5              mov    rbp,rsp
    0x04:  48 83 ec 10           sub    rsp,0x10
    0x08:  48 8d 3d 3b 00 00 00  lea    rdi,[rip+0x3b]
                                        ; 加载 "Hello, World!\n"
    0x0f:  c7 45 fc 00 00 00 00  mov    DWORD PTR [rbp-0x4],0x0
    0x16:  b0 00                 mov    al,0x0
    0x18:  e8 0d 00 00 00        call   0x12
                                        ; 调用 printf 方法
    0x1d:  31 c9                 xor    ecx,ecx
    0x1f:  89 45 f8              mov    DWORD PTR [rbp-0x8],eax
    0x22:  89 c8                 mov    eax,ecx
    0x24:  48 83 c4 10           add    rsp,0x10
    0x28:  5d                    pop    rbp
    0x29:  c3                    ret
    
    

    JVM 通过类加载器加载 class 文件里的字节码后,会通过解释器解释成汇编指令,最终再转译成 CPU 可以识别的机器指令,解释器是软件来实现的,主要是为了实现同一份 Java 字节码可以在不同的硬件平台上运行,而将汇编指令转换成机器指令由硬件直接实现,这一步速度是很快的,当然 JVM 为了提高运行效率也可以将某些热点代码(一个方法内的代码)一次全部编译成机器指令后然后在执行,也就是和解释执行对应的即时编译(JIT), JVM 启动的时候可以通过 -Xint 和 -Xcomp 来控制执行模式。

    从软件层面上, class 文件被加载进虚拟机后,类信息会存放在方法区,在实际运行的时候会执行方法区中的代码,在 JVM 中所有的线程共享堆内存和方法区,而每个线程有自己独立的 Java 方法栈,本地方法栈(面向 native 方法),PC寄存器(存放线程执行位置),当调用一个方法的时候, Java 虚拟机会在当前线程对应的方法栈中压入一个栈帧,用来存放 Java 字节码操作数以及局部变量,这个方法执行完会弹出栈帧,一个线程会连续执行多个方法,对应不同的栈帧的压入和弹出,压入栈帧后就是 JVM 解释执行的过程了。

    enter image description here

    中断

    刚刚说到, CPU 只要一上电就像一个永动机, 不停的取指令,运算,周而复始,而中断便是操作系统的灵魂,故名思议,中断就是打断 CPU 的执行过程,转而去做点别的,例如系统执行期间发生了致命错误,需要结束执行,例如用户程序调用了一个系统调用的方法,例如mmp等,就会通过中断让 CPU 切换上下文,转到内核空间,例如一个等待用户输入的程序正在阻塞,而当用户通过键盘完成输入,内核数据已经准备好后,就会发一个中断信号,唤醒用户程序把数据从内核取走,不然内核可能会数据溢出,当磁盘报了一个致命异常,也会通过中断通知 CPU ,定时器完成时钟滴答也会发时钟中断通知 CPU 。

    中断的种类,我们这里就不做细分了,中断有点类似于我们经常说的事件驱动编程,而这个事件通知机制是怎么实现的呢,硬件中断的实现通过一个导线和 CPU 相连来传输中断信号,软件上会有特定的指令,例如执行系统调用创建线程的指令,而 CPU 每执行完一个指令,就会检查中断寄存器中是否有中断,如果有就取出然后执行该中断对应的处理程序。

    陷入内核 : 我们在设计软件的时候,会考虑程序上下文切换的频率,频率太高肯定会影响程序执行性能,而陷入内核是针对 CPU 而言的, CPU 的执行从用户态转向内核态,以前是用户程序在使用 CPU ,现在是内核程序在使用 CPU ,这种切换是通过系统调用产生的,系统调用是执行操作系统底层的程序,Linux的设计者,为了保护操作系统,将进程的执行状态用内核态和用户态分开,同一个进程中,内核和用户共享同一个地址空间,一般 4G 的虚拟地址,其中 1G 给内核态, 3G 给用户态。在程序设计的时候我们要尽量减少用户态到内核态的切换,例如创建线程是一个系统调用,所以我们有了线程池的实现。

    展开全文
  • java动态运行代码并动态执行

    千次阅读 2020-08-17 16:45:32
    动态编译和执行都可以使用runtime方法在此不讲 动态编译 - 使用JavaCompiler方法进行编译 //动态编译 String path="g:/dynamic/first.java"; //路径 JavaCompiler compiler=ToolProvider....

    若在动态编译过程中出现空指针错误请看这篇文章(点击查看)

    动态编译和执行都可以使用runtime方法在此不讲

    动态编译

    - 使用JavaCompiler方法进行编译

    //动态编译
    		  String path="g:/dynamic/first.java"; //路径
    		  JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); //调用动态编译的工具
    		  int result =compiler.run(null,null, null, path); //进行动态编译,并返回结果
    		  System.out.println(result==0?"编译成功":"编译失败");
    

    动态运行

    实用类加载器进行操作(之后会专门讲类加载器)
    1、首先构建文件的目录url地址,

    2、使用URLClassLoader对象的loadClass方法加载对应类

    3、获取所加载类的方法

    4、传入方法所需的参数通过invoke运行方法

    //通过反射方法动态执行 
    		  //1、首先构建文件的目录url地址,
    		  URL[] urls =new URL[] {new URL("file:/"+"g:/dynamic/")};
    		  //2、使用URLClassLoader对象的loadClass方法加载对应类
    		  URLClassLoader loder=new URLClassLoader(urls);
    		  //3、获取所加载类的方法
    		  Class clazz =loder.loadClass("first");
    		 // 4、传入方法所需的参数通过invoke运行方法
    		  Method method=clazz.getDeclaredMethod("main", String[].class);
    		  method.invoke(null, (Object)new String[] {}); //当类型为String[]时,需要(Object)new String[] {}初始化
    

    注意点

    1、在构建URL时候一定要是URL数组。因为new URLClassLoader() 只支持URL[]的参数

    2、 在使用loader.loadClass()时,传入的为类名,不要加.class后缀

    3、在使用Method对象的getDeclaredMethod()方法时候第一个参数为获取方法的名字,第二个参数为本方法传入参数的类型

    4、执行invoke()方法时,第一个参数为方法的返回类型。第二个参数为一个对象,例如main方法中的String[]
    args,它本身是一个数组,若不将其强制转换为Object,会产生异常:

    完整代码

    package 动态编译;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    
    import javax.tools.JavaCompiler;
    import javax.tools.ToolProvider;
    
    
    
    
    
    public class dynamic1 {
    	public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException   {
    		
    		//动态编译
    		  String path="g:/dynamic/first.java"; //路径
    		  JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); //调用动态编译的工具
    		  int result =compiler.run(null,null, null, path); //进行动态编译,并返回结果
    		  System.out.println(result==0?"编译成功":"编译失败");
    		  
    		//通过反射方法动态执行 
    		  //1、首先构建文件的目录url地址,
    		  URL[] urls =new URL[] {new URL("file:/"+"g:/dynamic/")};
    		  //2、使用URLClassLoader对象的loadClass方法加载对应类
    		  URLClassLoader loder=new URLClassLoader(urls);
    		  //3、获取所加载类的方法
    		  Class clazz =loder.loadClass("first");
    		 // 4、传入方法所需的参数通过invoke运行方法
    		  Method method=clazz.getDeclaredMethod("main", String[].class);
    		  method.invoke(null, (Object)new String[] {}); //当类型为String[]时,需要(Object)new String[] {}初始化
    	}
    }
    
    • 被动态编译带类是 start 作用复制一张图片
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    展开全文
  • Java一行代码

    千次阅读 2017-04-26 20:54:51
    学习Java之前我们必须先下载这门语言的开发工具那就是Eclipse,这个开发工具是纯Java代码开发出来的,不需要安装直接就可以使用(但是Java编写的程序有个缺点就是运行速度稍慢,但是这并不影响正常使用),接下来...

      我们学习编程语言,干的第一件事估计差不多都是习惯性的在控制台输出一句Hello World!,学习Java也不例外,那么怎样才能输出这个呢?

    学习Java之前我们必须先下载这门语言的开发工具那就是Eclipse,这个开发工具是纯Java代码开发出来的,不需要安装直接就可以使用(但是Java编写的程序有一个缺点就是运行速度稍慢,但是这并不影响正常使用),接下来我们还需要下载一个JDK,现在已经升级到了8.0版本,建议下载最新版本,下载完我们还需要配置一下系统环境,如果不会配置可以百度一下,上面讲解的都很详细。跟着一步一步的做就可以。

    到这我们的准备工作已经完成了,进入Eclipse界面,让我们来新建一个Java项目,点击File-->New-->JavaProject给我们新建的第一个项目起一个好听的名字吧!吐舌头,项目建好了还需要点击src文件然后右键New-->Package(包:用于存放我们的类文件),给包起一个名字,命名大概就是cn.xxxx.xx,然后我们再来创建最重要的类也就是Class,根据上述的经验创建出一个Class类文件,给类文件起一个名字(类文件起名字一般是首字母进行大写)。

    我们的文件已经创建出来了接下来我们需要向文件中写入我们的代码,我们以上面的例子来练习输出一个Hello World!,对于初学的小白来说这就是我们迈向Java程序员的第一步,具体怎么写呢?,需要写一个main方法,在方法内写入相应代码,只有写出来main方法虚拟机才能识别出来,不然一切都白扯,举一个例子吧,虚拟机好比就是你自己,main方法就是你的身份证号,只有你认识自己的身份证号,所以呢,我们打代码第一件事就是写一个main方法。

                                                   

    接下来我们只需要在main方法中写一段输出语句即可完成我们的任务了,什么是输出语句呢?简单的来讲就是可以在控制台输出的语句,怎么写呢?System.out.println();,在哪写Hello World!呢?在括号里面写,具体怎么操作呢?System.out.println("Hello World!");注意:必须要加双引号,因为你写的是字符串所以必须要加。好了我们大功告成了。

    展开全文
  • 像不像二维数组今天我要说的是,可以通过一行代码就完成这个工作。是一样什么样的代码呢。看我下面的代码吧。定义了数组之后就只是写了一行代码,那这样能达到输出数组所有元素这个目的吗?看一下执行结果就知道了。...
  • Java修改文件中某一行字符串

    千次阅读 2020-01-13 15:42:38
    背景:想使用Java里的Apache common exec工具包中的CommandLine执行shell文件,因为shell文件里有一行是使用虚拟环境下的python命令去执行python脚本,我们想动态的修改python后面跟随的参数。 1. shell脚本(比如...
  • java中如何查看代码运行时间?

    千次阅读 2019-12-02 23:28:12
    查看的方式有很多,网上搜可以搜到大片,这里只记录种类型的代码,方便忘记时查看 long start = System.currentTimeMillis(); //此处写要测试的代码 long end = System.currentTimeMillis(); System.out....
  • Java代码实现转列

    千次阅读 2020-08-02 11:27:42
    此时这个排列方式数剧处理上比较麻烦,需要相同TIME,和相同STATION_NAME字段为一行数据,可以利用代码进行重新的排列, //listMap是查询出来数据集合 List<Map<String, Object>> listMap = iBaseDao....
  • java 一行代码让windows蓝屏

    万次阅读 2018-05-18 22:15:54
    其实呢,这一行java代码只是调了Windows的一个命令而已,和在Windows的CMD里执行 shutdown -s -f 命令一样,而这个命令是关机命令,-s是关机 -f是强制关机的参数。 你想定时关机的话,就是  shutdown -s -t 100 ...
  • 第一章 开始启程,你的第一行Android代码1.1.Android简介 1.1.1.Android系统架构 自下而上:Linux内核层(为硬件提供底层驱动。eg:显示驱动、音频驱动等)、系统运行时层(C/C++库和android运行时库,前者有Sqlite...
  • java中如何测试代码运行时间

    万次阅读 2018-07-01 10:14:00
    java中如何测试代码运行时间 、以毫秒为单位。long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTime = System.currentTimeMillis();...
  • 我们都知道,java中被注释部分的代码是不会被执行的。但是你这样处理,注释部分的代码确确实实的被执行了,你还真别不信,下面我们就来试试看!
  • 最简单最基础的写法没有任何骚操作 package regex; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; public class Test { public static void main...
  • java代码执行速度问题

    千次阅读 2016-11-09 18:45:13
    java代码执行速度问题
  • linux下运行java代码

    千次阅读 2015-10-21 21:31:58
    1. 用文本编辑器新建个yumhtest.java文件,在其中输入以下代码并保存:  public class yumhtest{  public static void main(String args[]) {  System.out.println("hello world !");  }  }  2. ...
  • 以下程序是证明指令重排的,也就是说,每一行代码并不是从上到下顺序执行的,各位看官先看看,看能否看得懂: import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import ...
  • 写cxf接口的客户端调用的时候,: ...这句,不执行。 即不输出,System.out.println("##################clientFactory");也不报错。 很奇怪,不知道什么原因。 把JaxWsDynamicClientFactory的源码放入
  • java打印代码执行耗时

    千次阅读 2019-07-16 19:31:36
    代码开发中,常常需要看代码执行效率,必须直观的看到某个循环消耗的多少时间,进而针对性的优化,有两种方式。 1.使用System.currentTimeMillis()方法 打印代码开始的执行时间和结束的时间,中间的时间差就是...
  • 目录 、前提: 二、写代码: ... 四、关于cmd基础命令: ...五、按照四步骤找到你的两个代码文件 ...、前提:你的电脑必须是安装完jdk并配置好环境变量的,如没有,请转到我的博客“初学Java的同...
  • 我js代码中执行某一行代码的时候,我想手动的暂停在某一行代码。 然后在通过手动的方式在启动执行下面的代码。 例如:我想在函数a中调用了函数b,而函数b的作用是弹出窗口,让用户输入信息。 我想获取到弹窗用户...
  • JAVA test代码运行

    千次阅读 2018-04-26 14:15:21
    jvm(java虚拟机),jdk(java开发工具包),jre(java运行时环境)http://www.oracle.com/technetwork/java/javase/downloads/index.html.;C:\Program Files\Java\jdk1.8.0_131\lib1) 新建变量名:JAVA_HOME,变量值...
  • java异步执行代码

    千次阅读 2018-03-05 16:51:00
     //这里可以写个等待方法,让当前线程等待10秒钟现象更明显  //控制台打印日志  System . out .println(Content);  } }.start(); }   public   static   void  main( String [] args...
  • Java基础-实战300行代码实现2048游戏

    千次阅读 2018-10-10 20:11:10
    300行代码实现2048(java) 声明:1.本文章为原创文章,转载注明出处,蟹蟹~ 2.初学java,水平有限,还有很多不足和应当修正的地方,欢迎评论指点 3.CSDN和简书同步更新内容一致。(作者名也一致) 本人在开始写之前...
  • 段有趣的Java代码

    千次阅读 2019-05-04 20:52:59
    这段代码对于没有接触过的初学者来说绝对是脸懵逼 但,不慌,问题不大 我们来对他的运行原理先进行一下研究,修改一下代码 可以看到,在System.out.println();中new Test(),实际上是调用了toString()这...
  • 控制代码执行一

    千次阅读 2019-08-30 10:32:16
    package com.example.concurrency.atomic; import ... import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.ut...
  • 最近有个需求, 当DB压力过大时获取Connction的时间过慢长时间不返回的话, 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索"java get connection 超时"答案上, ...
  • Java代码(远程)调用执行Linux命令

    千次阅读 2019-12-06 10:53:56
    最主要的是这三行代码,将程序打成jar包,上传到Linux服务器上运行,即可以执行想要执行的命令。 Runtime r = Runtime.getRuntime(); Process p = r.exec(" "); p.waitFor(); 代码示例: Java调用sqoop命令,实现...
  • Java—重复调用的代码块—方法

    千次阅读 2020-07-31 15:30:07
    在面向对象的程序设计中,方法是个很重要的概念,体现了面向对象三大要素中“封装”的思想。“方法”又被称为“函数”,在其他的编程语言中都有这个概念,其重要性也是不言而喻的。 在本质上,个类描述了两件...
  • Java基础——java代码规范详细版

    万次阅读 多人点赞 2019-07-03 11:41:57
    本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。 1.1.1 统一 统一是指,对于同个概念,在...
  • JavaParser生成,分析和修改Java代码

    千次阅读 2020-06-08 20:59:24
    作为开发人员,我们经常鄙视手动进行重复工作的人员。 我们认为, 他们应该实现这目标 。 尽管如此,我们还是进行... 生成我们必须编写的无聊的重复性Java代码 分析我们的代码以回答有关它的一些问题 做...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 940,453
精华内容 376,181
关键字:

java某一行代码没有执行

java 订阅