【初级01】java JVM核心技术(1):字节码、类加载器、GC机制

1.编程语言概述 

编程语言有不同的分类方法:

  • 面向过程、面向对象、面向函数
  • 静态类型、动态类型
  • 编译执行、解释执行
  • 有虚拟机、无虚拟机
  • 有GC、无GC

Java语言是一种面向对象、静态类型、编译执行,有虚拟机、有垃圾回收器和运行时的跨平台高级语言。

 2.编程语言的跨平台性

C++要想跨平台,只能是在源代码级别的,编写跨平台的代码,然后再到不同的平台上编译编译后运行;Java则能达到字节码级别的跨平台,java代码编译后,生成class文件,在不同的平台均可运行。我的另一篇Java【中级01】文章里面有更为深入的探讨。

 

 Java不仅跨平台,而且是向前兼容的。现在java最新版本已经到Java17了,但很多公司使用的还是java8,Java8版本的代码能正常运行在java17的环境下的。(其实这个兼容性到底是向前还是向后,要分不同的角度,我也没仔细研究,用到再查吧。无非就是一些特性能用不能用、或者功能有些许变化的问题,这里我就不求甚解了,阁下感兴趣的话详细可以参考此处

注:
向前兼容对应的英文是 forward compatibility 或 upward compatibility。
向后兼容对应的英文是 backward compatibility 或 downward compatibility。
向前兼容表示旧版本的系统可以接受新版本的数据,是旧版本对新版本的兼容。
向后兼容表示新版本的系统可以接受旧版本的数据,是新版本对旧版本的兼容。

3.C++和Java内存管理的差别

C/C++完全相信而且惯着程序员,让大家自行管理内存,可以编写很自由的代码,但一不小心就会造成内存泄漏等问题,导致程序崩溃。

Java/Golang完全不相信程序员,但也惯着程序员。所有的内存生命周期都由JVM运行时统一管理。在绝大部分场景下,你可以非常自由的写代码,而且不用关心内存到底是什么情况。内存使用有问题的时候,我们可以通过JVM来进行信息相关的分析诊断和调整。

Rust语言选择既不相信程序员,也不惯着程序员。让你在写代码的时候,必须清楚明白的用Rust
的规则管理好你的变量,好让机器能明白高效地分析和管理内存。但是这样会导致代码不利于人的理解,写代码很不自由,学习成本也很高。

4.java程序运行过程

一段源码程序,比如打印“ILOVEU”这个单词的程序,通过javac命令编译后,生成了一个class文件,这个class文件就是字节码文件,使用java命令运行这个class文件时,java虚拟机就通过类加载器加载这个class然后将它运行起来

 5.java字节码技术

Java bytecode由单字节(byte)的指令组成,理论上最多支持256个操作码(opcode)。
实际上Java只使用了200左右的操作码,还有一些操作码则保留给调试操作。根据指令的性质,主要分为四个大类:
1.栈操作指令,包括与局部变量交互的指令
2.程序流程控制指令
3.对象操作指令,包括方法调用指令
4.算术运算以及类型转换指令

package outputs;

public class HelloByteCode{

	public static void main(String[] args){

		HelloByteCode obj = new HelloByteCode();

	}

}

编译:javac HelloByteCode.java

生成了HelloByteCode.class

查看字节码:javap -c HelloByteCode.class

显示的字节码是以助记符的方式给出的

Compiled from "HelloByteCode.java"
public class outputs.HelloByteCode {
  public outputs.HelloByteCode();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值