- 浏览: 209678 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (267)
- java.lang (8)
- 问题汇总 (21)
- 异常记录 (20)
- 功能实现 (19)
- 面试总结 (25)
- 技巧总结 (8)
- 常用代码 (4)
- 编程习惯 (3)
- 编码规则 (3)
- java.util (10)
- java.io (1)
- JavaWeb (9)
- MySQL (16)
- SVN (3)
- MyBatis (11)
- Velocity (7)
- 其他知识 (10)
- 人生哲理 (1)
- 人生故事 (1)
- 自我感悟 (1)
- shiro (3)
- 基础知识 (0)
- 问题总结 (1)
- Spring 标签 (1)
- Spring (3)
- 点滴生活 (1)
- DOS (1)
- CAS (4)
- Linux (9)
- Storm (6)
- Shell (1)
- regex (1)
- Collection (4)
- poi (1)
- 经典语句 (1)
- NIO (5)
- concurrent (14)
- RPC (1)
- zookeeper (3)
- 待整理 (2)
- Hadoop (9)
- RabbitMq (2)
- flume (1)
- hive (7)
- hbase (4)
- kafka (1)
- scala (1)
- GC (0)
- java.util.concurrent.atomic (1)
- java.lang.ref (6)
- JVM (2)
- algorithm (1)
- conception (1)
- java key word (1)
- sun.misc (1)
最新评论
运行时与编译时
博文转载:http://www.importnew.com/1796.html
总结:
1.
win+r -> javac ConstantFolding.java -> 使用反编译器打开 ConstantFolding.class
说明:
(1)执行java ConstantFolding,两者结果都为30
但product1的值是在编译期计算的,product2则是在运行时计算的
(2)原因:常量折叠是一种Java编译器使用的优化技术。由于final变量的值不会改变,因此就可以对它们优化。
2.编译时与运行时
说明:
(1)一个java文件的编译执行过程
Test.java(Java文件) -> javac.exe -> Test.class(字节码文件)-> java -> 运行结果
注:java 执行时,文件不加后缀名.class
原因:java执行中规定,java xxx.yyy ,xxx.yyy表示yyy类在xxx包内,即 java Test.class表示执行 Test包中的class类
小技巧:
在java源文件所在文件夹建立一个记事本文档,输入以下3行代码
javac HelloWorld.java
java HelloWorld
@pause
将其保存为"Java运行批处理.bat"
然后双击这个批处理文件,将出现cmd窗口下的编译运行结果
(2)图中概念解析
a.JDK(java development kit)Java 语言的软件开发工具包
具体参考:
百度知道JDK
b.JRE(Java Runtime Environment,Java运行环境)
具体参考:
百度知道JRE
c.JVM(Java Virtual Machine,Java虚拟机)
具体参考:
百度知道JVM
d.JIT Compiler(Just-in-time Compiler) 即时编译
具体参考:
百度知道JIT
e.
JDK、JRE与JVM的区别
JIT的概念
3.常见发生在编译时或运行时的概念
(1)查看编译过的代码的作用
a.代码优化
b.解决泛型相关的问题
(2)方法重载与方法重写
(3)泛型
Test.java
Test.class
(4)
继承 – 发生在编译时,因为它是静态的
代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。
(5)注解
@Override是一个简单的编译时注解,它可以用来捕获类似于在子类中把toString()写成tostring()这样的错误。在Java 5中,用户自定义的注解可以用注解处理工具(Anotation Process Tool ——APT)在编译时进行处理。到了Java 6,这个功能已经是编译器的一部分了。
@Test是JUnit框架用来在运行时通过反射来决定调用测试类的哪个(些)方法的注解。
(6)其他内容
博文转载:http://www.importnew.com/1796.html
总结:
1.
public class ConstantFolding { static final int number1 = 5; static final int number2 = 6; static int number3 = 5; static int number4= 6; public static void main(String[ ] args) { int product1 = number1 * number2; //line A int product2 = number3 * number4; //line B } }
win+r -> javac ConstantFolding.java -> 使用反编译器打开 ConstantFolding.class
public class ConstantFolding { static final int number1 = 5; static final int number2 = 6; static int number3 = 5; static int number4 = 6; public static void main(String[ ] args) { int product1 = 30; int product2 = number3 * number4; System.out.println(product1 + " "+product2); } }
说明:
(1)执行java ConstantFolding,两者结果都为30
但product1的值是在编译期计算的,product2则是在运行时计算的
(2)原因:常量折叠是一种Java编译器使用的优化技术。由于final变量的值不会改变,因此就可以对它们优化。
2.编译时与运行时
说明:
(1)一个java文件的编译执行过程
Test.java(Java文件) -> javac.exe -> Test.class(字节码文件)-> java -> 运行结果
注:java 执行时,文件不加后缀名.class
原因:java执行中规定,java xxx.yyy ,xxx.yyy表示yyy类在xxx包内,即 java Test.class表示执行 Test包中的class类
小技巧:
在java源文件所在文件夹建立一个记事本文档,输入以下3行代码
javac HelloWorld.java
java HelloWorld
@pause
将其保存为"Java运行批处理.bat"
然后双击这个批处理文件,将出现cmd窗口下的编译运行结果
(2)图中概念解析
a.JDK(java development kit)Java 语言的软件开发工具包
具体参考:
百度知道JDK
b.JRE(Java Runtime Environment,Java运行环境)
具体参考:
百度知道JRE
c.JVM(Java Virtual Machine,Java虚拟机)
具体参考:
百度知道JVM
d.JIT Compiler(Just-in-time Compiler) 即时编译
具体参考:
百度知道JIT
e.
JDK、JRE与JVM的区别
JIT的概念
3.常见发生在编译时或运行时的概念
编译时 | 运行时 |
方法重载 | 方法重写 |
@Override | @Test |
泛型构造 | 代理 |
继承 | 组合 |
(1)查看编译过的代码的作用
a.代码优化
b.解决泛型相关的问题
(2)方法重载与方法重写
(3)泛型
Test.java
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("1"); list.add("1"); list.add("1"); list.add("1"); list.add("1"); for(String str : list){ System.out.println(str); } }
Test.class
public static void main(String[] paramArrayOfString) { ArrayList localArrayList = new ArrayList(); localArrayList.add("1"); localArrayList.add("1"); localArrayList.add("1"); localArrayList.add("1"); localArrayList.add("1"); for (Iterator localIterator = localArrayList.iterator(); localIterator.hasNext(); ) { String str = (String)localIterator.next(); System.out.println(str); } }
(4)
继承 – 发生在编译时,因为它是静态的
代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。
(5)注解
@Override是一个简单的编译时注解,它可以用来捕获类似于在子类中把toString()写成tostring()这样的错误。在Java 5中,用户自定义的注解可以用注解处理工具(Anotation Process Tool ——APT)在编译时进行处理。到了Java 6,这个功能已经是编译器的一部分了。
@Test是JUnit框架用来在运行时通过反射来决定调用测试类的哪个(些)方法的注解。
(6)其他内容
发表评论
-
京东商城--商城研发部面试
2017-12-01 19:30 5852017年12月01日 笔试题目 1. final fina ... -
海量日志数据,提取出某日访问百度次数最多的那个IP
2017-11-29 21:18 2218问题:一个的日志文件中存放IP地址,按照访问量对IP地址取访问 ... -
输出十进制数字的二进制数的表示
2017-11-03 23:16 1095一、代码如下: public static void m ... -
将数组中的内容随机打乱
2017-10-27 22:45 508问题:斗地主游戏,开局会将纸牌重新打乱,请用数组的随机排序实现 ... -
JVM基础
2017-10-26 22:41 417一、Java 运行时区域 《 ... -
String为什么使用final 修饰
2017-10-25 22:32 964主要是为了”安全性“和”效率“的缘故 1、由于String类 ... -
沐金地面试记录
2017-10-25 22:15 50110.25 下午同事帮忙投递的,约在晚上面试,下班之后赶紧去了 ... -
JD广告部面试经历
2017-10-23 16:46 425同事的同事招聘,于是同事帮忙推荐了一下! 2017年10月1 ... -
编程题目(一)
2017-09-28 22:28 3951.函数:参数为两个字符串a,b ,判断 b 中是否包含 a ... -
值传递与引用传递
2017-05-30 12:25 324一、值传递与引用传递 其实按值还是按引用的区别在于“是否在传 ... -
装箱与拆箱
2016-10-24 22:46 524public class IntegerTest { ... -
可变性与不可变性
2015-06-01 20:55 444String StringBuilder StringBuff ... -
CS架构和BS架构的区别
2015-05-25 08:50 477一、简介 1.C/S结构,即 ... -
HTTP常见响应状态码
2015-05-20 08:26 415问题:程序调试过程中 ... -
JIT的概念
2015-05-19 18:48 702参考文献: http://blog.csdn.net/yan ... -
JDK与JRE与JVM的区别
2015-05-19 18:45 10941.JDK (1)概念 JDK : Java Developm ... -
System.exit(0)与return的区别
2015-05-17 16:49 1021问题:System.exit(0)与return的区别 1. ... -
重载(overloading)与重写(overriding)
2015-05-17 15:50 636问题:重载(overloading)与重写(overridin ... -
==和equals
2015-05-15 20:07 649参考文献: http://www.cnblogs.com/zh ... -
return finally 与 System.exit(n)
2015-05-10 18:00 665问题:System.exit(n);的含义以及作用 说明: ...
相关推荐
Cannon-utils是一个可能与Java运行时动态编译相关的工具或库,但具体功能和使用方法需要查看其文档或源码才能详细了解。通常,这样的工具可能提供了辅助分析JIT编译效果、性能测试或者优化Java代码的功能。 总的来...
测试运行时与编译时环境变量 Webpack开发模式 运行npm run build:webpack-dev dist/test.webpack-dev.js最后一部分eval("if (true) {\n console.log(\"hi, this is development environment\");... ...
当你直接用`javac`命令编译单个源文件时,例如`javac HelloWorld.java`,编译后的类文件(HelloWorld.class)将被创建在与源文件相同的目录下。如果源文件包含`package`声明,例如`package com.test;`,那么`javac`...
Java代码快捷编译运行工具是针对初学者设计的一款实用程序,旨在简化Java编程过程中常见的编译和运行步骤。对于刚接触Java编程的开发者来说,通过命令行(CMD)进行源码的javac编译和java运行可能会感到繁琐,而这款...
在Android开发中,注解(Annotation)是一种强大的元数据,可以为代码添加额外的信息,而这些信息可以在编译时或运行时被解析和利用。ButterKnife是一款著名的Android视图绑定库,它通过注解简化了UI元素的绑定,...
**CALPUFF编译与运行流程** 1. **CALWRF编译和运行** - 源程序位于`CALWRF_v2.0.2_L131108/code`目录,编译脚本为`compile_ifort.sh`,需NETCDF库支持。 - 输入数据包括WRF输出文件`wrfout_d03_2019-03-21_00:00:...
### 在虚拟机上编译、安装和运行VPP #### 安装环境需求 为了确保在虚拟机上顺利编译、安装并运行VPP,首先需要满足以下环境配置: - **虚拟机软件**:推荐使用VMware 12.5版本。 - **虚拟机操作系统**:Ubuntu ...
### C语言性能提升:编译时与运行时优化深度解析 C语言作为一种高效且灵活的编程语言,在系统软件开发领域有着不可替代的地位。其特点包括简洁高效、接近硬件、良好的可移植性、丰富的库支持、支持结构化编程以及...
7. **32位与64位兼容性**:在选择编译器时必须注意,确保编译出的可执行文件与目标平台的位数匹配。例如,如果树莓派是32位系统,那么生成的可执行文件也应该是32位的。 8. **虚拟机环境**:在Windows上使用虚拟机...
本文将深入探讨"JAVA范例 四)异常处理---编译时异常、运行时异常"这个主题,结合标签"源码"和"工具",我们可以理解这与实际编程实践和可能使用的开发工具如Struts2框架相关。 首先,我们来看编译时异常。编译时...
当我们需要查看已编译的.class文件的源代码时,就需要反编译工具。Java的反编译工具有很多,如JAD、JD-GUI等。本工具集成了这一功能,可以将.class文件转换回.java源代码,帮助开发者理解已有的代码或逆向工程。 四...
在实现Linux 0.01编译与运行时,作者采用了Redhat 9.0平台作为开发环境,GNU工具链作为开发工具,并使用GNU工具链的AT&T语法汇编器进行汇编程序的编译。在源代码语法的修改方面,作者参照Linux 0.11源代码,对Linux ...
在使用 VS2010 进行编译时,可能会遇到程序在 XP 系统上不能运行的问题。这主要是由于 VS2010 编译出的程序依赖于 Microsoft Visual C++ 2010 Redistributable-x86,但 XP 系统可能没有安装这个组件。今天,我们将...
3. **运行与调试**:成功编译后的Java程序可以在服务器上运行,返回执行结果。部分在线编辑器还提供了运行控制台,显示程序输出,甚至支持简单的调试功能,如设置断点、单步执行等。 4. **版本控制**:为了便于多...
尽管反编译的代码可能无法与原始源代码完全一致,尤其是当原始代码使用了复杂的编译器优化时,但JadGUI可以提供足够的信息来理解和研究代码逻辑。 反编译工具有时也用于分析恶意软件或版权保护的问题,但需要注意的...
编译原理中,运行阶段的存储组织与分配是程序运行时重要的支撑技术之一。它的核心是为程序中定义的变量、常量和函数等分配必要的存储空间,并在程序执行过程中对其进行有效的管理。 首先,运行时存储组织与分配的...
运行时编译C#的unity pack
动态编译与传统的静态编译有着显著的区别,静态编译是在应用程序发布之前将源代码转换为机器语言,而动态编译则是在程序运行过程中根据需要即时进行。这种技术在.Net Core中通过Just-In-Time(JIT)编译器得以实现。...