几分钟了解下java虚拟机--01
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正在路上了!!!
几分钟了解下java虚拟机--01的更多相关文章
- 带着新人看java虚拟机01
1.前言(基于JDK1.7) 最近想把一些java基础的东西整理一下,但是又不知道从哪里开始!想了好久,还是从最基本的jvm开始吧!这一节就简单过一遍基础知识,后面慢慢深入... 水平有限,我自己也是 ...
- 深入理解Java虚拟机 #01# 自己编译JDK
x 首先用书上的脚本尝试,失败. 之后根据源文件的 README 编译,抛出: root@linux:/opt/openjdk# sh ./get_source.sh ERROR: Need init ...
- go实现java虚拟机01
前段时间看了一本书,说的是用go语言实现java虚拟机,很有意思,于是就花了一段时间学习了一下go语言,虽然对go的底层理解不是很深,但是写代码还是可以的,就当做个读书笔记吧! 链接在这里,另外还有一 ...
- 深入理解java虚拟机-01 走进java
第一章是对java的产生,历史的整体介绍 java的使用很广泛,安装jdk的时候会看到一句广告语runs in 10 billions machines.使用java的设备多达几十亿台 1.概述 优点 ...
- 每日一问:你了解 Java 虚拟机结构么?
对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...
- java虚拟机理解探索1
以下内容源于个人对<深入java虚拟机>的理解总结 基本概念: java虚拟机可以指一种抽象规范,也可以指一种具体实现,亦可以指一个java虚拟机实例. 虚拟机生命周期: 一个java虚拟 ...
- 深入java虚拟机学习 -- 内存管理机制
前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...
- 谈谈java虚拟机
本文可作为北京圣思元深入java虚拟机的课堂笔记. 先看一个令人dan teng的面试题 public class Singleton { public static Singleton s=new ...
- JVM基础系列第2讲:Java 虚拟机的历史
说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...
- day 05JVM和深入理解java虚拟机
-----------------Java 虚拟机发展史 PS: Sun公司有 HotSpot, BEA公司有JRockit,IBM有 J9 这三个是高性能VM 在Oracle收购Sun和BEA这两 ...
随机推荐
- HTML中,table怎样使用
<table> 标签用于在HTML中创建表格.表格是一种以行和列的形式组织和显示数据的结构化方式.<table> 标签通常与其他相关标签(如 <tr>.<th ...
- System V信号量 vs. POSIX信号量:核心区别与选型指南
System V信号量 vs. POSIX信号量:核心区别与选型指南 最近在学习linux系统编程的章节,接触到了两种信号量,所以专门研究了二者的区别,将二者的对比记录于此. 在Linux多线程/进程 ...
- 『Plotly实战指南』--布局进阶篇
在数据可视化领域,Plotly的子图布局是打造专业级仪表盘的核心武器. 当面对多维数据集时,合理的子图布局能显著提升多数据关联分析效率,让数据的呈现更加直观和美观. 本文将深入探讨Plotly中子图布 ...
- Sentinel源码—5.FlowSlot借鉴Guava的限流算法
大纲 1.Guava提供的RateLimiter限流使用示例 2.Guava提供的RateLimiter简介与设计 3.继承RateLimiter的SmoothBursty源码 4.继承RateLim ...
- macOS终端修改DNS
以WiFi为例 networksetup -listallnetworkservices networksetup -setdnsservers Wi-Fi 8.8.8.8 networksetup ...
- php和thinkphp实现页面调转
1.原生PHP https://www.cnblogs.com/jade640/p/7118565.html 2.thinkPHP跳转方法及重定向 https://blog.csdn.net/Wake ...
- 通过引用实现php无限极分类
/** * 递归加引用实现无限极分类 * @param $items * @return array */ public function getTree2($items) { $array = ...
- K8s新手系列之Pod的重启策略
概述 K8s中Pod的重启策略具有确保服务连续性.保证任务完整性.提升资源利用效率.便于故障排查的作用 Pod的重启策略可以根据restartPolicy字段定义. 重启策略适用于pod对象中的所有容 ...
- 开源的java内网穿透 - 维基代理(wiki-proxy)
1.简介 维基代理(wiki-proxy).开源的java内网穿透项目. 技术栈:cdkjFramework(维基框架).JPA.Netty 遵循MIT许可,因此您可以对它进行复制.修改.传播并用于任 ...
- SVN之“解决SVN清理失败问题”
解决SVN清理失败,显示乱码问题 更新SVN时,提示要清理,但是清理失败,此时什么也操作不了,以下就是解决方案. 情况如图: 解决方案一: 下载splite3 新建一个临时文件夹,使用英文名字,将解压 ...