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的次数。

最新文章

  1. Android开发学习之路-RecyclerView滑动删除和拖动排序
  2. POJ 题目分类(转载)
  3. 单点登录(SSO)系统的总结
  4. Final-阶段站立会议2
  5. C 记录
  6. catci监控
  7. hdu 5443 The Water Problem 线段树
  8. python基础教程第2章——列表与元组笔记
  9. 谈谈android反编译和防止反编译的方法(转)
  10. 团队作业4----第一次项目冲刺(Alpha版本)4.29
  11. docker-solr 使用host模式修改默认的8983端口号
  12. LINUX系统日常使用命令
  13. LoadRunner之IP欺骗
  14. Python设计模式 - 基础 - 封装 & 继承 & 多态
  15. [Node.js] 01 - How to learn node.js
  16. Go语言加解密--AES简单实践
  17. Python实现的复杂的计算器的代码
  18. Effective C++ 50条款
  19. 个人博客:有态度的HBase/Spark/BigData
  20. 因子和(luoguP1593)(等比数列求和+逆元)

热门文章

  1. PHP操作路由器
  2. React报错之Property 'X' does not exist on type 'HTMLElement'
  3. SpringBoot定时任务 - 经典定时任务设计:时间轮(Timing Wheel)案例和原理
  4. 使用 Redis 源码编译发布 Windows 版 Redis For Windows 发行包
  5. MySQL主从复制之GTID模式介绍
  6. 主流前沿的开源监控和报警系统Prometheus+Grafana入门之旅
  7. EMAS Serverless系列~4步教你快速搭建小程序
  8. Dynamic CRM使用FetchXML在js中查询与调用传递编码问题
  9. ABC209F. Deforestation——DP(、数学容斥)
  10. java代码审计的点