《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记
1. 谈谈你对Java平台的理解。

Java是一种面向对象的语言,最显著的特性有两个方面:
一个就是一次编译,到处运行(Write once, run anywhere),能够非常容易的获得跨平台能力;
另一个就是垃圾收集(GC,Garbage Collection),Java通过GC回收分配内存,大部分情况下程序员不需要操心内存的分配和回收;
什么是JRE(Java Runtime Environment)/JDK(Java Development Kit)?
JRE:java运行环境,包含了JVM,Java内裤,以及一些模块;
JDK:JRE的一个超集,提供了更多工具,比如编辑器、各种诊断工具;
JVM < JRE < JDK
2. Java是解释执行,这句话正确么?

Java是解释执行,这个说法不太准确。我们开发java的源代码,通过Javac编译成字节码,然后在运行时通过JVM内嵌的解释器将字节码转换为最终的机器码。
但是常见的JVM(Oracle JDK 提供的Hotspot JVM),都提供了动态编译器JIT(Just in Time),JIT能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行。
如图Java是分为编译器和运行时。java的编译生成的是字节码,而不是可以直接执行的机器码。Java通过字节码和JVM这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是“一次编译,到处执行的基础”。
JVM启动时可以指定不同的参数对运行模式进行选择,例如:
-Xmixed:解释和编译混合模式;
-Xint:只进行解释执行,不对代码进行编译,抛弃JIT可能带来的性能优势;
-Xcomp:关闭解释器或者叫做最大优化级别。但这种模式并不一定是最高效的,他会导致JVM启动变慢,同时有些JIT编译器优化方式,如分支预测,如果不进行profiling,往往不能进行有效优化。
AOT(Ahead-of-Time Compilation):直接将字节码编译成机器代码,避免了JIT预热等各方面的开销。在Oracle JDK 9 引入了实验性的AOT特征,并增加了新的jaotc工具;
《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记的更多相关文章
- java核心技术-(总结自杨晓峰-java核心技术36讲)
1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk ...
- 《Java核心技术36讲》阅读笔记:Exception和Error有什么区别?
1.Exception 和 Error有什么区别?运行时异常与一般异常有什么区别? Exception和Error都继承自java.lang.Throwable.在Java中只有Throwable的实 ...
- 《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
非常荣幸作为晓峰哥的同事,之前就看过这篇文章,重写读一遍,再学习学习. 一.开篇词 初级.中级:java和计算机科学基础.开源框架的使用:高级.专家:java io/nio.并发.虚拟机.底层源码.分 ...
- java核心技术36讲笔记
Java-Basic 谈谈final. finally. finalize有什么不同? 典型回答: final可以用来修饰类.方法.变量,分别有不同的意义, final修饰的class代表不可以继承扩 ...
- Java核心技术36讲----------谈谈final、finally、finalize有什么不同
一.final 1.final修饰方法时,需要注意的点: #final修饰方法时,之前的第二个原因是效率.但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升.在最近的Java版本中,不需要使用 ...
- java核心技术36讲
https://time.geekbang.org/column/intro/82?utm_source=website&utm_medium=infoq&utm_campaign=8 ...
- Java核心技术36讲----------Exception和Error有什么区别
1.异常知识点学习实例 代码如下: package fromnet; /** * 参考链接:https://blog.csdn.net/qq_18505715/article/details/7319 ...
- Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记
第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...
- Java核心技术卷一基础知识-第2章-Java程序设计环境-读书笔记
第2章 Java程序设计环境 本章内容: 安装Java开发工具箱 使用集成开发环境 选择开发环境 运行图形化应用程序 使用命令行工具 建立并运行applet本章主要介绍如何安装Java开发工具箱(JD ...
随机推荐
- css3鼠标经过出现转圈菜单(仿)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JavaScript浏览器对象模型(BOM)之location对象
一.概述: location 是 BOM 对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能. 事实上,location 对象是 window 对象的属性,也是 document ...
- Burnside引理和Polya定理
转载自:https://blog.csdn.net/whereisherofrom/article/details/79631703 Burnside引理 笔者第一次看到Burnside引理那个公式的 ...
- 死磕salt系列-salt入门
saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...
- linux 根据端口号查看占用进程的pid
1.netstat -nap | grep 端口号 2.第一种的可以查看端口号对应的pid,但是会出现pid为空的情况,这种时候用:lsof -i:端口号 3.根据pid查看端口号 netstat - ...
- 【[ZJOI2012]灾难】
好像很久之前就看过这道题,大概是刚学\(LCA\)的时候 之后当时肯定是不会的呀 现在发现这道题并不是非常难 首先我们发现这个灭绝的关系非常像一棵树,我们建出这个灭绝树求一个前缀和就可以啦 那么应该怎 ...
- LayIM.AspNetCore Middleware 开发日记(六)嵌入资源的使用,layim.config的封装
前言 距离上一篇博客竟然已经10多天了...工作上的事,个人原因,种种吧.不多说废话,本文将会重点介绍layim的入口配置. LayIM配置 其实在开发者文档里面已经描述的很清楚了.除了几个重要的接口 ...
- JNI由浅入深_10_JNI 综合开发
1.使用ndk-build时如果找不到某个类,可以使用下面两种方法解决: 1.1 进入src目录 D:\project3\JNIAndroid\src>set classpath=D:\proj ...
- navicat导出数据库字典
select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,COLUMN_COMMENT from information_schema.column ...
- oracle数据库的配置文件
url=jdbc:oracle:thin:@localhost:1521:orcldriver=oracle.jdbc.OracleDriverusrname=GJQ (PLSQL Develop ...