拉丁的传说

也许您已经知道这一点,但是这个功能并不像听起来那么简单,因为Java语言实际上将堆栈跟踪暴露给程序员。考虑以下程序:public class Test {

public static String f() {

String s = Math.random() > .5 ? f() : g();

return s;

}

public static String g() {

if (Math.random() > .9) {

StackTraceElement[] ste = new Throwable().getStackTrace();

return ste[ste.length / 2].getMethodName();

}

return f();

}

public static void main(String[] args) {

System.out.println(f());

}}即使这有“尾调”,也可能无法优化。(如果它被优化,它仍然需要整个调用堆栈的簿记,因为程序的语义依赖于它。)基本上,这意味着在向后兼容的同时很难支持它。

尾调用优化 java_为什么JVM仍然不支持尾调用优化?相关推荐

  1. 第一篇:java调用公共数据接口:QQ在线状态查询(java调用http接口)

    java调用公共数据接口: webxml 前言 一.以webxml上的一个接口为案例 二.查看接口文档 1.查看支持的调用方式 2.确认接口地址与参数 三.编码(找代码直接跳这里!) 1.配置Rest ...

  2. Java锁优化思路及JVM实现

    1. 锁优化的思路和方法 这里提到的锁优化,是指在阻塞式的情况下,如何让性能不要变得太差.但是再怎么优化,一般来说性能都会比无锁的情况差一点. 这里要注意的是,在ReentrantLock中的tryL ...

  3. 深入理解JVM虚拟机(九):运行期优化与JIT编译器

    1. JIT编译器的引入 首先我们这篇文章中所说的编译器都是指JVM的组成部分之一-即时编译器(JIT),与生成Java字节码的javac编译器要区分开来.首先我们这篇文章中所说的编译器都是指JVM的 ...

  4. JVM编译过程与后期的优化

    文章目录 一.JVM编译过程 二.即时编译器优化(后期优化) 1.编译器 2.编译触发的条件 3.编译优化技术(挑重要的讲几个) 三.后记 一.JVM编译过程 引用自博客:https://blog.c ...

  5. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  6. java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程

    参考文章 1.先看一下未设置JVM参数的情况,默认情况下,没有设置任何Jvm参数. 2.设置Jvm参数. 配置参数: 关于这些设置的JVM参数是什么意思,参考Jvm调优. -XX:MetaspaceS ...

  7. java 多态实现的jvm调用过程_多态:JVM是如何进行方法调用的

    在我们平时的工作学习中写java代码时,如果我们在同一个类中定义了两个方法名和参数类型都相同的方法时,编译器会直接报错给我们.还有在代码运行的时候,如果子类定义了一个与父类完全相同的方法的时候,父类的 ...

  8. Java多线程学习十九:JVM 对锁进行了哪些优化?

    JVM 对锁进行了哪些优化呢? 相比于 JDK 1.5,在 JDK 1.6 中 HotSopt 虚拟机对 synchronized 内置锁的性能进行了很多优化,包括自适应的自旋.锁消除.锁粗化.偏向锁 ...

  9. Java --- JVM动态链接与方法调用

    目录 一.动态链接(指向运行时常量池的方法引用) 二.方法调用 2.1.静态链接 2.2.动态链接 2.3.早期绑定 2.4.晚期绑定 三.虚方法与非虚方法 3.1.非虚方法 3.2.普通调用指令 3 ...

最新文章

  1. 服务器设备监控系统,服务器设备监控系统
  2. python多个for的执行顺序-python顺序执行多个py文件
  3. 模拟信号与数字信号之间的差异与比较—Vecloud微云
  4. Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
  5. sjms-3 结构型模式
  6. DevExpress GridControl使用方法总结
  7. 【人脸对齐-Landmarks】300W 数据集
  8. node.js mysql防注入_避免Node.js中的命令行注入安全漏洞
  9. 《全数据时代的炼金师》全书语言生动、易懂
  10. 单个基因集富集分析泡泡图绘制
  11. nyoj-155-求高精度幂(java大数)
  12. c语言单向循环链表实现增删,C语言单向非循环链表增删查改实现
  13. 【数字信号处理】基于matlab数字信号离散序列短时傅里叶变换【含Matlab源码 1545期】
  14. java roll_java.util.Calendar roll()方法
  15. 杭州有哪些牛批的互联网公司
  16. 嵌入式Linux为Qt定制keymap
  17. 动图怎么裁剪边框?三步教你在线裁剪gif
  18. halcon机器视觉之玩转车牌识别-超人视觉罗超
  19. WNMP环境搭建(Win10+Nginx+MySQL+PHP)
  20. Vue 响应式实现原理深入浅出

热门文章

  1. C# 使用 Index 和 Range 简化集合操作
  2. WeihanLi.Npoi 1.10.0 更新日志
  3. Istio 中的多集群部署与管理
  4. 使用Docker-Compose搭建高可用redis哨兵集群
  5. ASP.NET Core gRPC 使用 Consul 服务注册发现
  6. 使用Magicodes.SwaggerUI快速配置SwaggerUI以及设置API分组
  7. 微软推出Python免费在线教程视频
  8. 【招聘(广州)】-年薪30W起-自助打印领域业内第一
  9. .NET微服务体系结构中为什么使用Ocelot实现API网关
  10. 张队长主讲这堂 .NET Core技术培训公开课,太原你约不约