java se - 桌面

java ee - 网页

Jdk :Jre 区别
Jdk-开发环境必要
Jre-运行环境需要
Jdk包含Jre,安装完Jdk就可以了

Javac Demo1.java
-Javac 编译源代码(前端编译),生成Demo1.class,java字节码文件
Java Demo1
-Java 运行Demo1.class文件,加载到JVM,JVM将字节码解释为平台机器指令进行运行,所以给出class文件就可以了,不用给源码,对一般的Java方法而言,编译后代码的大小相对于字节码的大小,膨胀比达到10x是很正常的。

编译技术大约分为两种,一种AOT,只线下(offline)就将源代码编译成目标机器码,这是普遍用在系统程序语言中;另一种是JIT,只及时的编译,但是大部分的JIT引擎,针对的是将IR(中间代码,如JavaByteCode) 在运行时, 有针对性的翻译成机器码。

最早的Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。

工作原理 
当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。

通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT技术。

在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。

2.相关知识 
JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度,当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码).

JIT并不总是奏效,不能期望JIT一定能够加速你代码执行的速度,更糟糕的是她有可能降低代码的执行速度。这取决于你的代码结构,当然很多情况下我们还是能够如愿以偿的。

从上面我们知道了之所以要关闭JITjava.lang.Compiler.disable(); 是因为加快执行的速度。由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这种情况,当前的JIT只对经常执行的字节码进行编译,如循环等

Java学习01 (第一遍)的更多相关文章

  1. Java学习08 (第一遍) - SpringMVC

    写一下午的好多居然丢失...自动保存也只是保存丢失后的 那就不多写了,简单写: Spring:(自己画的) 官网的: 写一个Spring的例子: Eclipse http://repo.spring. ...

  2. Java学习07 (第一遍) - Spring MVC

    跳过Struts2,直接学习Spring MVC MVC,自己画的 属性(Property/Attribute),事件(Event),方法(method/procedure),函数(Function) ...

  3. Java学习05 (第一遍) - JSP与Servlet

    JSP 客户端发出Request请求,JSP容器将JSP转译为Servlet的源码,再编译加载到内存执行,结果Response到客户端. Request->JSP->Servlet(jav ...

  4. Java学习06 (第一遍) - JSP与Servlet

    EL(Expression Language) <% User user=(User)session.getAttribute("user"); Dept dept=user ...

  5. Java学习04 (第一遍)

    封装.抽象.继承和多态.封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属 ...

  6. Java学习03 (第一遍)

    Java是面向对象的语言,函数是面向过程语言的叫法,比如C语言,在Java中一般称之为方法. 构造方法的作用是实例化对象,每个类中都有,即使不写程序也会分配一个默认无参数的构造方法. Java中都是对 ...

  7. Java学习02 (第一遍)

    巩固基础: byte 1个字节 -128到127 = 2^(字节数*8-1),转变2进制,01111111(负127)到11111111(正127) ,存在正负零(00000000),正零保留,负零补 ...

  8. Java学习01

    Java学习01 第一章 1.JRE与JDK JDK(JAVA Develop Kit,JAVA开发工具包)提供了Java的开发环境和运行环境,主要用于开发JAVA程序,面向Java程序的开发者; J ...

  9. Java学习记录第一章

    学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...

随机推荐

  1. java synchronized 同步详解

    记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...

  2. MySQL也真是让人郁闷(关于子查询中使用limit)

    在MySQL4.1中子查询是不能使用LIMIT的,手册中也明确指明 “This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY ...

  3. js保留两位小数点

    var temp = 2.222222222; temp.toFixed(2); //得出结果2.22

  4. join,fromkeys(),深浅拷贝

    1. 补充基础数据类型的相关知识点 1. str. join() 把列表变成字符串例 # s= "哈哈"# s1=s.join('-')# print(s1)# s="呵 ...

  5. Python笔记:用for循环删除列表中的元素

    for运行过程中会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个元素,然后获取它,接着删除第0个元素,这时候,原来是第1个的元素会变成第0个,当指针向后移动一次,指向了现在第1个元素 ...

  6. 微信小程序笔记<一>初识小程序

    一.IDE界面介绍 编辑界面 调试界面 项目管理界面 左侧工具介绍 二.项目文件类型及结构介绍 这是一个初始小程序的项目目录,其中涉及四种文件类型: *.js:JavaScript文件(JavaScr ...

  7. 关于QT编译错误问题

    这里的意思是出现QT编译错误: 1.之前编译没问题,突然就报错了,而且错误根本不知道啥玩意. 2.编译出现不能自动更新,比如更改ui但是编译之后没该改变. ... 解决方法: 1.删除Makefile ...

  8. Basler和Matrox的配置及调试

    说明: 本系列博文是我自己研究生课题,采用做一步记录一步,在论文答辩结束或者机器设计结束之后才会附上源代码! 自从装好相机和设计好机械结构之后就没有继续进行下一步,这段时间花了三四天继续上次任务进行, ...

  9. 20165205 2017-2018-2 《Java程序设计》第六周学习总结

    20165205 2017-2018-2 <Java程序设计>第六周学习总结 教材学习内容总结 String类 String对象(常量,对象) 字符串并置(结果仍是常量) 常用方法 len ...

  10. <转>如何用C++实现自动微分

    作者:李瞬生转摘链接:https://www.zhihu.com/question/48356514/answer/123290631来源:知乎著作权归作者所有. 实现 AD 有两种方式,函数重载与代 ...