首页 > 基础资料 博客日记
几分钟了解下java虚拟机--01
2025-06-17 01:30:02基础资料围观100次
本篇文章分享几分钟了解下java虚拟机--01,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
JDK, JRE, JVM的关系
jar包 - > java字节码 - > 机器码
解释执行和即使编译
性能优化
跨平台
- 解释型语言 - 点名 python (但是python很多点都优化了)
运行时要一直依赖解释器
每次启动重新解释
error不运行不报错
“’. . . ‘”
Runtime
- JVM (Java Virtual Machine):负责执行字节码的核心引擎。
- JRE (Java Runtime Environment):提供运行时所需的完整环境,包括 JVM 和标准类库。
- 运行时数据和状态:如内存分配、线程状态、异常处理等,这些是在程序运行时动态管理的。
因此,"runtime" 是一个抽象概念,而 JVM 是实现这个概念的具体技术实体。
编程语言简评
Java 基本类型
除 long 和 double 外,其他基本类型与引用类型在解释执行的方法栈帧中占用的大小是一致的,但它们在堆中占用的大小确不同。在将 Boolean 、byte 、char 以及 short 的值存入字段或者数组单元时,Java 虚拟机会进行掩码操作。在读取时,Java 虚拟机则会将其扩展为 int 类型
Java编译器
自动装箱与自动拆箱
基本类型 → 对象(int → Integer)
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
可通过调节 java.lang.Integer.IntegerCache.high 调高缓存int的范围
但是不知道为什么没有java.___.low
泛型与类型擦除
桥接方法
由于泛型擦除 父方法的传入参数发生改变(Object t)
不符合重写规则从而引入了桥接方法
class Parent<T> {
public void method(T t) {
System.out.println("Parent");
}
}
class Child extends Parent<String> {
@Override
public void method(String s) {
System.out.println("Child");
}
}
**泛型擦除后的父方法**
public void method(Object t) {
System.out.println("Parent");
}
**java编译器生成的桥接方法**
public void method(Object t) {
method((String) t);
}
public void method(String s) {
System.out.println("Child");
}
Java对象的内存布局
// Foo foo = new Foo(); 编译而成的字节码
0 new Foo
3 dup
4 invokespecial Foo()
7 astore_1
// Foo 类构造器会调用其父类 Object 的构造器
public Foo();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
压缩指针
JAVA字节码
感觉和机器码类似, 不做过多叙述, 偷懒了哈哈🙌
02正在路上了!!!
文章来源:https://www.cnblogs.com/many-bucket/p/18932182
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?