JVM的跨平台性

一次编写,到处运行

JVM将字节码文件编译成对应操作系统的机器码

JVM的语言无关性

JVM的内存区域

  • 虚拟机栈:在JVM运行过程中存储当前线程运行方法所需的数据,指令、返回地址
  • 本地方法栈:本地方法栈是和虚拟机栈非常相似的一个区域,它服务的对象的native方法
  • 程序计数器:主要用来记录各个线程执行的字节码地址
  • 方法区:存放类的信息、常量池、方法数据、方法代码
  • :堆是JVM上最大的内存区域,我们申请的几乎所有的对象,都是在堆中存储

  

JVM的解释执行

字节码文件会按照顺序执行 ,字节码文件先被加载到jvm中,执行引擎根据字节码指令逐行解释成本地机器码

JIT——即时编译器

逐行解释代码——运行速度比较慢

jvm还有一种另外的情况 (是否为热点代码)

  • 热点代码:某方法调用了一万次,或者某个循环调用了一万多次,此时jvm会将这些代码判定为热点代码

若为热点代码,则会通过JIT(即时编译器)直接将热点代码翻译成本地机器码指令

对象是否一定在堆中创建

  • 几乎所有对象都在堆中创建

如果new对象的代码为非热点代码,则一定在堆中创建

如果new对象的代码为热点代码,则会经过JIT(即时编译器)从而出现不在堆中创建的情况,JIT即时编译器中还有优化技术,比如判断new出来的对象是否可以逃逸出出方法或者线程,如果不能,再判断jvm是否开启标量替换,如果jvm开启了标量替换则在栈中创建该对象

标量替换:堆里面的对象,最重要的是它的成员变量,这些成员变量能否在栈中进行替换,如果能则可以标量替换

JVM(JAVA Virtual Machine)Java虚拟机的更多相关文章

  1. The Structure of the Java Virtual Machine Java虚拟机结构 虚拟机内存模型

    小结: 1.实现一台Java虚拟机,只需正确读取class文件中的每一条字节码指令且能正确执行这些指令所蕴含的操作. 2.设计者决定:运行时数据区的内存如何布局,选择哪种垃圾收集算法,是否对虚拟机字节 ...

  2. 60年代进程 80年代线程 IPC How the Java Virtual Machine (JVM) Works

    小结: 1. To facilitate communication between processes, most operating systems support Inter Process C ...

  3. What is Java virtual machine?

    Java Virtual Machine (JVM) is a specification that provides runtime environment in which java  bytec ...

  4. Java Virtual Machine (JVM) objects 虚拟机实例的产生 退出 两种线程

    Apache Spark is built around a distributed collection of immutable Java Virtual Machine (JVM) object ...

  5. Java虚拟机(Java Virtual Machine)

    JVM(Java Virtual Machine),Java虚机机,是JDK最底层的东西.只要能将源代码编译成字节码(.class)文件,就可以由JVM在不同平台上解释成机器指令来执行.所以,Java ...

  6. java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

    java虚拟机内存不足,"Could not create the Java Virtual Machine"问题解决方案 在运行java程序时,遇到问题"Could n ...

  7. java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

    在运行java程序时,遇到问题"Could not create the Java Virtual Machine."如下截图:

  8. Java Virtual Machine(Java虚拟机)

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. Java语言 ...

  9. JVM常用命令和性能调优建议 [Could not create the Java virtual machine]

    一.查看jvm常用命令jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. ...

  10. JVM Specification 9th Edition (4) Chapter 3. Compiling for the Java Virtual Machine

    Chapter 3. Compiling for the Java Virtual Machine 内容列表 3.1. Format of Examples 3.2. Use of Constants ...

随机推荐

  1. manim边学边做--Matrix

    在代数问题中,矩阵是必不可少的工具,manim中提供了一套展示矩阵(Matrix)的模块,专门用于在动画中显示矩阵格式的数据.关于矩阵的类主要有4个: Matrix:通用的矩阵 IntegerMatr ...

  2. [oeasy]python0097_苹果诞生_史蒂夫_乔布斯_沃兹尼亚克_apple_I

    苹果诞生 回忆上次内容 上次时代华纳公司 凭借手中的影视ip和资本 吞并了雅达利公司 此时 雅达利公司 曾经开发过pong的 优秀员工 乔布斯 还在 印度禅修 寻找自我 看到游戏行业 蓬勃发展 乔布斯 ...

  3. [oeasy]python0017_解码_decode_字节序列_bytes_字符串_str

    ​ 解码 decode 回忆上次内容 code就是码 最早也指电报码 后来有各种编码.密码.砝码.条码 都指的是把各种事物编个号 encode就是编码 编码就是给事物编个号 ​ 编辑 编码基本了解了 ...

  4. oeasy教您玩转vim - 80 - # 宏macro

    ​ 宏 macro 回忆 这次我们了解了编码格式 屏幕显示的encoding 文件保存的fileencoding 不能搞乱了 一般用什么编的就用什么解 解铃还须系铃人 打开不正确的话,就要切到正确的上 ...

  5. nacos一个奇怪的问题:找不到正确的应用名-环境.后缀名配置文件

    spring: profiles: active: dev application: name: system-api cloud: nacos: server-addr: 192.168.101.6 ...

  6. scratch源码下载 | 几何冲刺

    程序说明: <几何冲刺>是一款基于Scratch平台开发的跑酷类游戏程序.在这个游戏中,玩家控制一个黄色的小方块,在快速向前冲刺的过程中躲避各种障碍物.通过按下键盘上的上方向键,玩家可以操 ...

  7. axios传递参数的使用

    今天在学习elasticsearch时,遇到一个问题:项目中前端采用的是Vue2+axios,后端的接口采用Restful风格来接收: 关于Resultful风格: 1. GET(SELECT):从服 ...

  8. 【Mybatis】06 Session获取 & 配置参数总结

    会话获取 SqlSessionFactory 最佳的获取方式就是使用Mybatis提供的资源类加载配置文件 调用会话工厂建造者实例的建造方法注入读取流 要注意的是建造者生成了了实例就可以不需要了 这里 ...

  9. 【Java】JDBC Part6 Apache-DBUtil & Spring-JdbcTemplate

    Apache-DBUtils 开源的JDBC工具类,对JDBC的简单封装 SQL操作交给了QueryRunner的实例 Maven依赖 <!-- https://mvnrepository.co ...

  10. 【微信小程序】02 常用标签组件

    轮播标签: 轮播图 <swiper> <!-- 轮播项 --> <swiper-item>1</swiper-item> <swiper-item ...