系列文章目录
1:JVM核心知识
1.1字节码
目录
3.Java的GC有什么用呢,和其他编程语言相比有何区别呢?
前言
本系列主要针对想进一步进阶Java的开发者
一、JVM基础知识
1.Java语言特性:
在我们接触的编程语言中,大致的区分如下图:
那么Java是一种什么样的语言呢?大致说来,Java是一种面向对象,静态类型,编译执行,有VM/GC和运行时,跨平台的高级语言。
2.为什么Java可以跨平台,Java又是何种跨平台呢?:
在C/C++中,编写完代码,生成.c或.cpp文件,需要放到不同的操作系统上编译,不同的操作系统生成不同的文件,例如Windows上生成.exe或.dll,Linux上生成.so等,这样的跨平台是源代码跨平台。
而在Java中,由于虚拟机的存在,只需在任意操作系统上编译一次,拿到字节码文件,拷贝到其他有Java运行环境的操作系统,都可以运行起来。此为二进制的跨平台。
3.Java的GC有什么用呢,和其他编程语言相比有何区别呢?
C/C++:完全相信程序员,内存管理完全交给程序员,可以编写很自由的代码,但是一不小心就发生内存泄漏的风险。
Java/Golang:不完全相信程序员,所有内存均由JVM统一管理,也可以编写很自由的代码,不需考虑内存的释放问题。
二、Java字节码技术
1.什么是字节码?
Java bytecode 由单字节(byte)的指令组成,理论上最多支持 256 个操作码(opcode)。 实际上 Java 只使用了200左右的操作码, 还有一些操作码则保留给调试操作。
字节码的分类
2.生成字节码,查看字节码
代码如下(示例):
javac java文件地址 //生成字节码
javap -c class文件地址 //查看字节码
关于字节码的具体内容我这里不再赘述,感兴趣的可以上网参考其他资料
3.字节码运行时的结构
JVM 是一台基于栈的计算机器。 每个线程都有一个独属于自己的线程栈(JVM Stack),用于存储栈帧(Frame)。 每一次方法调用、JVM 都会自动创建一个栈帧。 栈帧由操作数栈、 局部变量数组以及一个 Class 引用组成。 Class 引用指向当前方法在运行时常量池中对应的 Class
栈帧的图示如下:
总结
以上就是今天要讲的内容,本文大致介绍了Java的大概优势,并且介绍了字节码的生成与查看。下面我们将学习JVM的类加载器,敬请期待。