java是C++—

相比c++:

1、无直接指针操作
但是有引用,其底层是指针实现的。但是这种指针比较安全
2、自动内存管理
系统自动释放内存。不需要delete

3、数据类型长度固定
和平台无关。(而c++中各种数据类型的长度是和环境有关的,比如long可能是4字节、可能是8字节)

这种设计有利于跨平台使用
4、不用头文件
编译器帮你找!

5、不包含结构和联合

只保留了类。
结构:struct
联合:union
(嚯我这才知道联合这东西)

6、不支持宏
7、不用多重继承
8、无类外全局变量
9、无goto

三大核心机制

  • java虚拟机
  • 代码安全性检测
  • 垃圾收集机制

java的编译与运行/JVM/JRE

source.java —(javac编译)—> source.class —(java运行)—> 虚拟机

其中,.java是源程序 .class是字节码文件,可以在虚拟机上执行

JVM

JVM = Java Virtual Machine
java虚拟机(JVM)读取并处理经编译过的字节码class文件。
虚拟机: 在计算机上模拟的计算机。

JRE

JRE = Java Runtime Environment
JRE = JVM + API(Lib,可称做接口或者库)

JRE运行程序时的三项主要功能

  • 加载代码: 由class loader完成
  • 校验代码:由bytecode verifier完成
  • 执行代码: 由runtime interpreter

疑问:为什么要校验代码呢?编译时校验不可以吗?假如编译时保证是安全的,那运行时不进行校验不就节省资源了吗?
可能的答案: jre不信任jdk。我们无法保证jdk一定是一个安全、可信任的编译器,编译的程序也未必是安全的。
但感觉这种说法还是有问题。。毕竟不安全的编译器会被自然淘汰的。。

JDK

包括编译器(javac.exe)、执行器(java.exe )、文档生成器、java打包器、java调试器
JDK = JRE + Tools

c语言被普遍用在操作系统的编写上。相比java,c的很大一个优势是可预知性。比如java有内存自动回收机制,我们无法预知java会在什么时候回收内存。而c语言不会出现这种情况。