我不得不跳过篮球,但我几乎设法在我的项目中ServiceStack使用iOS Monotouch.一个运行时JIT异常就是:
System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int> ()' while running with --aot-only.
Run Code Online (Sandbox Code Playgroud)
违规代码非常简单:
internal WriteObjectDelegate GetWriteFn<T>()
{
return JsonWriter<T>.WriteFn();
}
Run Code Online (Sandbox Code Playgroud)
作为测试,我修改了SS代码以使内部方法和类型公开,并在我的项目的启动代码中包含以下内容(实际上被调用).
var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn();
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>();
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这仍然没有提醒AOT,当上面的代码执行时我得到了异常!这是因为泛型参数是值类型吗?或者是因为这些是静态类和方法?如何强制Monotouch AOT上述方法?
有问题的SS代码位于JsonTypeSerializer.cs和JsonWriter.Generic.cs中:https: //github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json
我有一个Angular(4.3.2)应用程序,我想在其上执行AOT构建.应用程序是使用@angular/cli.我有两个搭建的组件ng generate和一个模块,其中两个都作为声明包含在内:
import {PrivateComponent} from './private.component/private.component';
NgModule({
imports: [
// other imports
PrivateRoutingModule
],
declarations: [
...some other components,
PrivateComponent,
AppTopBarComponent
]
// other stuff
})
export class PrivateModule {}
Run Code Online (Sandbox Code Playgroud)
私有组件也用于模块的路由:
const routes: Routes = [
{path: '', component: PrivateComponent, children: // other components}
]
@NgModule({
imports: [RouterModule.forChild(routes)] // this is the Angular built-in router module
})
export class PrivateRoutingModule {}
Run Code Online (Sandbox Code Playgroud)
注意:路由是如何在另一个模块定义和导入PrivateModule
的AppTopBarComponent内部使用的PrivateComponent's模板.所以两者都被使用和宣布.但是当我使用"node_modules/.bin/ngc" -p tsconfig-aot.json(我在Windows 10上)时,我收到此错误消息:
Cannot determine the …
我正在尝试使用JDK9的新AOT功能编译应用程序服务器,并且面临着许多挑战.
应用程序服务器包含~180 MB的罐子; 编译一起溢出整数,所以我试图将每个模块编译成一个(.so)库.这些模块与其他模块有依赖关系,所以我不得不使用-J-cp -J依赖项将它们放在classpath上.这导致了4.4 GB的libs - 因为AOT应该加速服务器启动,你可以想象从磁盘加载它并没有真正帮助.(可以剥离那些调试信息的库,但我们仍然在讨论与罐子相比规模增长的顺序.)
我很沮丧,jaotc实际上类加载编译的类,它触发静态构造函数(这有时会给我错误).此外,编译器无法处理缺少的引用类,有时这只是一个运行时依赖 - 即使没有它们,服务器也可以正常运行.所以我必须提供空的模拟类来满足编译器.
但是,当使用AOT跟踪(-Xlog:aot+class+load=trace:file=/tmp/aot.txt:none而不是stdout -XX:+PrintAOT)运行服务器时,我发现libs也包含一些依赖项:
found java.lang.Object in /home/user/aot/common/libjava.base-coop.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
found java.lang.Object in /home/user/aot/appserver/lib/libcom.example.module1.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
found java.lang.Object in /home/user/aot/appserver/lib/libcom.example.module2.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
Run Code Online (Sandbox Code Playgroud)
这证实了我的疑问,lib只包含了我给编译器编译的jar中的代码,但至少包含了超类的代码.我也不确定JVM在多个库中找到相同类时的行为.
剥离重复是否可能?大/多库项目的推荐方法是什么?
我知道clojure/java interop的基础知识:从clojure调用java,反之亦然.但是,我无法将clojure中的类型集合返回到java.我试图List<TypedObject>从调用clojure的java代码中看到这种性质的东西.
Java Object:
public class TypedObject {
private OtherType1 _prop1;
public OtherType1 getProp1() {
return _prop1;
}
public void setProp1(OtherType1 prop1) {
_prop1 = prop1;
}
}
CLojure method:
(defn -createListOfTypedObjects
"Creates and returns a list of TypedObjects"
[input]
;Do work here to create and return list of TypedObjects
[typedObj1, typedObj2, typedObj3])
(:gen-class
:name some.namespace
:methods [createListofTypedObjects[String] ????])
Run Code Online (Sandbox Code Playgroud)
让我们考虑一下,我正在使用clojure编写一个API,它将作为jar文件分发,以便在java中使用.我的问题是如何通过代替???? 上面的问题标记在:AOT的gen类中,所以程序员使用我的api在java中编写一段代码,可以createListofTypedObjects() returns List<TypedObject>从eclipse中获得相应的intellisense/code completion(即:) .
最新版本的Angular2允许在您的app.bootstrap.ts文件中使用此代码进行提前(AOT)编译:
// The browser platform without a compiler
import { platformBrowser } from '@angular/platform-browser';
// The app module factory produced by the static offline compiler
import { AppModuleNgFactory } from './app.module.ngfactory';
// Launch with the app module factory.
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
Run Code Online (Sandbox Code Playgroud)
我们如何将Webpack和Typescript加载器与Angular2的AOT编译器集成?
似乎可能还没有选择这样做,但我问的是关于Stack溢出的问题,所以当它可用时,答案很容易找到.
更新10/12/16 - 我得到了它的工作,请看下面我的答案.
所以当在Angular-CLI app中遇到麻烦时.
这是发生的事情:
ng serve,不ng serve --aot产生例外,一切正常.只ng serve --prod在浏览应用程序时运行休息时间.
正在寻找答案,并发现这些不是,所以我在应用程序中的每个属性之前写了'public'并检查提供程序中是否有函数调用,但没有任何改变.
接下来我尝试用--aot旗帜运行它并且工作得很好,但是在--prod出现相同错误时仍然崩溃.
它在runnig登录过程中完全崩溃,这是:
奇怪的是,我到处都有类似的过程,但它在确切的位置崩溃了.
可以请有人给我一些信息,我应该在哪下挖?干杯!
更新:我在登录过程的每个部分都在切断代码,然后用--prod它构建它,结果发现来自@ angular/material的MatDialog产生了错误.在MatDialog登录组件使用afterClosed()挂钩到其父级解析后触发登录,并以某种方式产生异常.
因此,触发弹出窗口的父级是HeaderComponent,其中包含方法:
openLoginDialog(): void {
this.authService.login();
const dialogRef = this.dialog.open(LoginDialogComponent);
dialogRef.afterClosed().subscribe(result => {
if (result) {
this.authService.login();
}
});
}
Run Code Online (Sandbox Code Playgroud)
在LoginDialogComponent里面是简单解决的方法:
login(login, password) {
this.authService.tryLogin(login, password).subscribe(data => {
this.dialogRef.close(true);
});
}
Run Code Online (Sandbox Code Playgroud)
在我删除MatDialog后,另一个单词摆脱了项目中唯一的弹出窗口,错误消失了.我已经创建了另一个具有自己的Login表单路由的组件,但仍然认为删除整个工作模块是因为构建错误不是解决方案.
我的package.json:
"dependencies": {
"@angular/animations": "^5.0.2",
"@angular/cdk": "^5.0.0-rc.1",
"@angular/common": "^5.0.0",
"@angular/compiler": "^5.0.0",
"@angular/core": "^5.0.0",
"@angular/flex-layout": …Run Code Online (Sandbox Code Playgroud) 有谁知道一些免费的AOT Java编译器?我找到了一个 - http://gcc.gnu.org/java/.
我知道Xamarin for Android支持AOT.软件免费后,它的所有功能也都免费.我阅读了文档并通过修改project.csproj文件启用了AOT ,如下所示:
<AotAssemblies>True</AotAssemblies>
Run Code Online (Sandbox Code Playgroud)
确保我的项目路径不包含空格(中断处理)后,我跑了构建和我的APK 两个托管的.NET的DLL 和本地编译库.可悲的是,该应用程序似乎使用.NET DLL并完全忽略本机库.有什么办法可以解决这个问题吗?
编辑:阅读其他一些与Mono AOT相关的问题,似乎这可能是它应该如何工作的.我想AOT编译我的应用程序,希望减少~2秒的启动时间,这在我从JIT切换到AOT之后根本没有改变.有人可以向我解释这个吗?
奖励:有什么方法可以启用高级优化标志?(自我)
我对Angular 2很新,所以如果我不准确,请纠正我.
在Angular 1中,编译器更通用和动态,这意味着脏检查代码是在不同组件上运行的单个代码.但是,出于Angular 2的性能考虑,每个组件都将编译为生成的代码,该代码处理该特定组件的绑定和脏检查.这意味着根据组件模板,更具体地说,绑定的数量,生成的代码变得更大.
当我们使用JIT时,这并不重要,因为此代码不通过网络并在浏览器中生成.但是当使用AOT时,它将从服务器传输.
当应用程序很小时,AOT肯定会导致较小的有效负载,因为编译器不会被发送到浏览器.但随着应用程序的增长,我认为这种差异开始减少并且可能会反转(是吗?!).但我没有量化感.对于中型或大型应用来说,它会成为一个真正的问题吗?
我一直在用Java开发图像处理应用程序,但我最近对VALA感兴趣.原因是因为我相信我可以提高应用程序性能(我主要关注的是与C/C++库的互连,因为看起来< Example >在Java中使用C/C++桥时存在性能损失).
背景(我所知道):
有一些事情在我脑海里蔓延,我无法找到答案:
任何见解?
aot ×10
angular ×4
java ×4
angular-cli ×3
c# ×2
typescript ×2
angular-aot ×1
angularjs ×1
clojure ×1
compilation ×1
interop ×1
java-9 ×1
java-aot ×1
javascript ×1
jep ×1
jit ×1
native ×1
servicestack ×1
typeerror ×1
vala ×1
webpack ×1
xamarin ×1
xamarin.ios ×1