TeaVM编译JAVA为Wasm的原理

简介: TeaVM编译JAVA为Wasm的原理

 分两步:

  • 先把JAVA class翻译为Wasm C的文本格式。
  • 再对Wasm C进行编译,产生正式的wasm文件。

举例说明。

源码:

    @Export(name = "layoutJs2Java")
    public static int[] layoutJs2Java() {
        int[] intarray = new int[]{5, 8};
        return intarray;
    }

中间代码

int32_t layoutJs2Java() {
    int32_t _intarray;
    int32_t localVar1;
    int32_t ___stack__;
    ___stack__ = meth_otbw_WasmRuntime_allocStack(INT32_C(0));
    if (((*((int32_t *) &wasm_heap[INT32_C(468) + 0]) & INT32_C(1)) == INT32_C(0))) {
        *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(12);
        initclass_tw_WasmBenchmarkStarter();
        if ((*((int32_t *) &wasm_heap[___stack__ + 0]) != INT32_C(12))) {
            goto block_0;
        }
    }
    *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(11);
    _intarray = meth_otr_Allocator_allocateArray(INT32_C(15040), INT32_C(2));
    if ((*((int32_t *) &wasm_heap[___stack__ + 0]) == INT32_C(11))) {
        localVar1 = _intarray;
        if ((INT32_C(0) >= *((int32_t *) &wasm_heap[(localVar1 + INT32_C(8)) + 0]))) {
            *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(13);
            teavm_throwArrayIndexOutOfBoundsException();
        } else {
            *((int32_t *) &wasm_heap[((localVar1 + INT32_C(12)) + (INT32_C(0) << INT32_C(2))) + 0]) = INT32_C(5);
            if ((INT32_C(1) < *((int32_t *) &wasm_heap[(localVar1 + INT32_C(8)) + 0]))) {
                *((int32_t *) &wasm_heap[((localVar1 + INT32_C(12)) + (INT32_C(1) << INT32_C(2))) + 0]) = INT32_C(8);
                goto block_1;
            }
            *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(14);
            teavm_throwArrayIndexOutOfBoundsException();
        }
    }
    block_0: ;
    _intarray = INT32_C(0);
    block_1: ;
    *((int32_t *) &wasm_heap[INT32_C(724) + 0]) = (___stack__ - INT32_C(4));
    return _intarray;
}
目录
相关文章
|
20天前
|
监控 算法 Java
Java内存管理:垃圾收集器的工作原理与调优实践
在Java的世界里,内存管理是一块神秘的领域。它像是一位默默无闻的守护者,确保程序顺畅运行而不被无用对象所困扰。本文将带你一探究竟,了解垃圾收集器如何在后台无声地工作,以及如何通过调优来提升系统性能。让我们一起走进Java内存管理的迷宫,寻找提高应用性能的秘诀。
|
27天前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
1月前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
5天前
|
缓存 Java 编译器
JAVA并发编程volatile核心原理
volatile是轻量级的并发解决方案,volatile修饰的变量,在多线程并发读写场景下,可以保证变量的可见性和有序性,具体是如何实现可见性和有序性。以及volatile缺点是什么?
|
6天前
|
监控 算法 Java
掌握Java的垃圾回收机制:从原理到实践
在Java的世界中,垃圾回收(Garbage Collection,简称GC)是一块神秘的领域,它如同一位默默无闻的清洁工,确保内存中不再使用的对象得到妥善处理。本文将带你走进垃圾回收的大门,探索它的工作原理、常见算法及其在实际应用中的调优策略。无论你是初学者还是有一定经验的开发者,这篇文章都将为你揭开垃圾回收的神秘面纱,让你的Java程序运行得更加高效和稳定。
19 5
|
8天前
|
缓存 Java 编译器
JAVA并发编程synchronized全能王的原理
本文详细介绍了Java并发编程中的三大特性:原子性、可见性和有序性,并探讨了多线程环境下可能出现的安全问题。文章通过示例解释了指令重排、可见性及原子性问题,并介绍了`synchronized`如何全面解决这些问题。最后,通过一个多窗口售票示例展示了`synchronized`的具体应用。
|
4天前
|
Java 开发者 数据格式
【Java笔记+踩坑】SpringBoot基础4——原理篇
bean的8种加载方式,自动配置原理、自定义starter开发、SpringBoot程序启动流程解析
【Java笔记+踩坑】SpringBoot基础4——原理篇
|
18天前
|
存储 安全 Java
深入探讨Java的分层编译
本文主要探讨Java虚拟机(JVM)中的分层编译(Tiered Compilation)机制及其对程序性能的影响。
|
27天前
|
Java
【Java集合类面试二十一】、请介绍TreeMap的底层原理
TreeMap基于红黑树实现,能够根据键的自然顺序或提供的Comparator排序,其基本操作的时间复杂度为O(log N)。
|
27天前
|
Java
【Java集合类面试二十】、请介绍LinkedHashMap的底层原理
LinkedHashMap的底层原理是在HashMap的基础上,通过维护一条双向链表来保持键值对的插入和遍历顺序,同时继承HashMap的多数方法并重写部分方法以维护链表。