JVM运行模式和逃逸分析
JVM三种运行模式:
解释模式(Interpreted Mode):只使用解释器(-Xint强制JVM使用解释模式),执行一行JVM字节码就编译一行为机器码。(可以马上看到效果,但是运行过程比较慢)
编译模式(Compiled Mode):只使用编译器(-Xcomp强制JVM使用编译模式),先将所有JVM字节码一次性编译为机器码,然后一次性执行所有机器码。(启动时间比较长,但是运行过程快)
混合模式(Mixed Mode):依然使用解释模式执行代码,但是对于一些“热点”代码采用编译模式,JVM一般采用混合模式执行代码。
逃逸分析:
就是分析对象动态作用域,当一个对象在一个方法中被定义后,它可能被外部的方法所引用,如作为参数传递到其他地方中。
(jdk7后默认开启逃逸分析,开启:-XX:+DoEscapeAnalysis 关闭:-XX:-DoEscapeAnalysis)
我们知道new出来的对象都是放在堆中的,其实有特殊情况:
public User test1(){
User user = new User();
user.setId(1);
user.setName("cjc");
return user;
}
上面代码User对象逃逸出了本方法
public void test2(){
User user = new User();
user.setId(2);
user.setName("cjc2");
}
上面代码User没有逃逸出本方法,也就是说它跟随方法的消亡而消亡。
那么,一个聪明的jvm就会将逃逸出本方法的对象放在堆中,而没有逃逸出本方法的对象存在当前栈帧中,随着方法的结束而被消灭。就减少了堆内存的占用,就减少发生gc的次数。
JVM运行模式和逃逸分析的更多相关文章
- 如果面试官问你 JVM,额外回答逃逸分析技术会让你加分!
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章. 引言 我在面试别人的过程中,JVM 内存模型我几乎必问,虽然有人说问这些就是面试造航母,工作 ...
- JVM笔记-逃逸分析
参考: http://www.iteye.com/topic/473355http://blog.sina.com.cn/s/blog_4b6047bc01000avq.html 什么是逃逸分析(Es ...
- Java魔法堂:JVM的运行模式
一.前言 JVM有Client和Server两种运行模式.不同的模式对应不同的应用场景,而JVM也会有相应的优化.本文将记录JVM模式的信息,以便日后查阅. 二.介绍 在$JAVA_HOME/jre/ ...
- Java魔法堂:JVM的运行模式 (转)
一.前言 JVM有Client和Server两种运行模式.不同的模式对应不同的应用场景,而JVM也会有相应的优化.本文将记录JVM模式的信息,以便日后查阅. 二.介绍 在$JAVA_HOME/jre/ ...
- Apache Flink on K8s:四种运行模式,我该选择哪种?
1. 前言 Apache Flink 是一个分布式流处理引擎,它提供了丰富且易用的API来处理有状态的流处理应用,并且在支持容错的前提下,高效.大规模的运行此类应用.通过支持事件时间(event-ti ...
- JVM之基础概念(运行时数据区域、TLAB、逃逸分析、分层编译)
运行时数据区域 JDK8 之前的内存布局 JDK8 之后的 JVM 内存布局 JDK8 之前,Hotspot 中方法区的实现是永久代(Perm),JDK8 开始使用元空间(Metaspace),以前永 ...
- JVM的逃逸分析
我们都知道Java中的对象默认都是分配到堆上,在调用栈中,只保存了对象的指针.当对象不再使用后,需要依靠GC来遍历引用树并回收内存.如果堆中对象数量太多,回收对象还有整理内存,都会会带来时间上的消耗, ...
- Java之JVM逃逸分析
引言: 逃逸分析(Escape Analysis)是众多JVM技术中的一个使用不多的技术点,本文将通过一个实例来分析其使用场景. 概念 逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配 ...
- 小师妹学JVM之:逃逸分析和TLAB
目录 简介 逃逸分析和栈上分配 TLAB简介 TLAB详解 设置TLAB空间的大小 TLAB中大对象的分配 TLAB空间中的浪费 总结 简介 逃逸分析我们在JDK14中JVM的性能优化一文中已经讲过了 ...
随机推荐
- HTTP配置
目录 HTTP配置 虚拟主机 相同IP不同端口 不同IP相同端口 相同IP相同端口不同域名 Linux修改hosts文件 Windows修改hosts文件 配置https HTTP配置 虚拟主机 虚拟 ...
- PHP 获取数组长度
count()函数,默认是获取一维数组,参数为:COUNT_NORMAL,添加第二个参数:COUNT_RECURSIVE,则可以获取多维关联数组的长度(意思为递归获取),例如:count($arr, ...
- 关于 CDH 环境中部署 Dolphinscheduler 出现 hive-jdbc 包冲突的解决办法
目前社区小伙伴经常反映在 cdh 环境中部署 Dolphinscheduler 出现 hive 包冲突的问题,报错日志信息如下: [WARN] 2020-04-29 09:55:30.815 org. ...
- Unity3D学习笔记11——后处理
目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 1. 概述 一般来说,图形渲染引擎都会把帧缓冲(Framebuffer)技术封装成两个接口,其中之一就是后处理(Post-process) ...
- virtio_net 设备的队列数问题
virtio_net设备的其他问题:见 https://www.cnblogs.com/10087622blog/p/15886345.html 一个virtio_net设备在 virtnet_pro ...
- 【Java】学习路径30-可变参数 Variable Parameter
定义一个add函数,要求其功能:传入任意数量的参数然后返回相加的结果. public class VariableParameter { public static void main(String[ ...
- 第七十八篇:写一个按需展示的文本框和按钮(使用ref)
好家伙, 我们又又又来了一个客户 用户说: 我想我的页面上有一个搜索框, 当我不需要他的时候,它就是一个按钮 当我想要搜索的时候,我就点一下它, 然后按钮消失,搜索框出现, 当我在浏览其他东西时,这个 ...
- Linux虚拟机快捷键大全
转发请注明原作者! 图形化命令框快捷键 Ctrl-Shift-t 创建标签页 Ctrl-Shift-w 关闭标签页 Ctrl-Shift-n 创建新窗口 Ctrl-Shift-q 关闭新窗口 Ctrl ...
- 腾讯云实验室 Gitea 互动教程上线啦
如果你想学习.体验或是向他人演示开源的 Gitea 代码托管方案,那么接下来给你推荐一款神器. 使用腾讯云实验室免费获得 Gitea 实验环境,直接通过浏览器就可在 Ubuntu Server 20. ...
- 全网最全Redis学习
一.Redis简介 Redis是以Key-Value形式进行存储的NoSQL数据库,C语言进行编写的.平时操作的数据都在内存中,效率特高,读的效率110000/s,写81000/s,所以多把Redis ...