未处理的事件循环异常 - OutOfMemoryError
Unhandled event loop exception - OutOfMemoryError
我在xtext中创建了一个"language",用"MWE2 Workflow"可以生成没有错误。我还可以启动一个 eclipse 新实例并为特定语言创建一个文件。第一行也没有问题,但是当我尝试添加另一行时,此 eclipse 实例不再响应 seconds/minutes 并发生以下错误:
提示:
Unhandled event loop exception
Java heap space
堆栈跟踪:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at java.util.ArrayList.<init>(Unknown Source)
at com.google.common.collect.Lists.newArrayList(Lists.java:128)
at org.eclipse.xtext.ui.editor.model.DocumentTokenSource.setTokens(DocumentTokenSource.java:217)
at org.eclipse.xtext.ui.editor.model.DocumentTokenSource.computeDamageRegion(DocumentTokenSource.java:327)
at org.eclipse.xtext.ui.editor.model.DocumentTokenSource.updateStructure(DocumentTokenSource.java:249)
at org.eclipse.xtext.ui.editor.model.XtextDocument.fireDocumentChanged(XtextDocument.java:700)
at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191)
at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210)
at org.eclipse.jface.text.DefaultDocumentAdapter.replaceTextRange(DefaultDocumentAdapter.java:248)
at org.eclipse.swt.custom.StyledText.modifyContent(StyledText.java:7268)
at org.eclipse.swt.custom.StyledText.sendKeyEvent(StyledText.java:8111)
at org.eclipse.swt.custom.StyledText.doContent(StyledText.java:2481)
at org.eclipse.swt.custom.StyledText.handleKey(StyledText.java:5955)
at org.eclipse.swt.custom.StyledText.handleKeyDown(StyledText.java:5986)
at org.eclipse.swt.custom.StyledText.handleEvent(StyledText.java:5663)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1085)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1070)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1112)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1108)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1529)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4722)
at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:343)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4610)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:339)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:5023)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2549)
会话数据:
eclipse.buildId=4.4.2.M20150204-1700
java.version=1.8.0_31
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
Framework arguments: -product org.eclipse.platform.ide
Command-line arguments: -product org.eclipse.platform.ide -data <path>/../xtext_craass -dev <path>/emf/.metadata/.plugins/org.eclipse.pde.core/Eclipse CraAss Runtime/dev.properties -os win32 -ws win32 -arch x86_64
有一些(少数)相似的问题"topics",但到目前为止我可以看到,它们似乎是不同的问题:
- http://www.eclipse.org/forums/index.php/t/318571/
- https://bugs.eclipse.org/bugs/show_bug.cgi?id=449057
也许我在 xtext 文件中做错了什么:
grammar org.bs.craass.CraAss
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate craAss "http://www.bs.org/craass/CraAss"
CraAss:
functions += CAFunction*
main = CAMain
functions += CAFunction*;
CAMain:
'main'
commands += CACommand+
'done';
CAFunction:
'def' name=FUNCTION_TERMINAL
params += CAParam*
'body'
commands += CACommand+
'done';
CAParam:
'param' name=CAVariable;
CACommand:
CADec | CALoad | CAMov
| CAAdd | CASub | CAMul | CADiv
| CARead | CAPrint | CAPrintln
| CACall;
CACall:
'call' method=FUNCTION_TERMINAL params+=VAR_TERMINAL*;
CADec:
'dec' name=CAVariable;
CALoad:
'load' to=CACaches ',' value=INTEGER;
CAMov:
'mov' to=CACaches "," from=CACaches;
CAAdd:
'add' op1=CACaches "," op2=CACaches;
CASub:
'sub' op1=CACaches "," op2=CACaches;
CAMul:
'mul' op1=CACaches "," op2=CACaches;
CADiv:
'div' op1=CACaches "," op2=CACaches;
CARead:
'read' object=CARegister;
CAPrint:
'print' object=CARegister;
CAPrintln:
'println' object=CARegister;
CACaches:
(CAVariable | CARegister);
CAVariable:
dec=VAR_TERMINAL;
CARegister:
dec=REGISTER_TERMINAL;
terminal INTEGER : '-'?('0'..'9')+;
terminal VAR_TERMINAL : '_' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
terminal REGISTER_TERMINAL : ('ax' | 'bx' );
terminal FUNCTION_TERMINAL : (('a'..'z'|'_'|'0'..'9')*'.')?('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
希望有人能帮助我或知道问题所在。
看起来你是 Java,在 Heap space 中是 运行。
此问题的解决方案是增加 JVM 启动时使用的堆大小。为此,您需要使用启动参数 -xmx.
您必须在要启动的 eclipse 应用程序的 运行-configurations 中设置此参数。
只需为 -xmx 使用更高的值,它定义了启动的 JVM 的最大堆 space。
经过一些工作,从错误语法构造到工作语法。我找到了一个(可能的)麻烦制造者。我需要以下行:
terminal WS : (' '|'\t'|'\r'|'\n')+;
这解决了 OutOfMemoryError,但我觉得很奇怪。错过这个,会导致这样的错误。添加此行后,语法仍然无法使用,并显示错误,例如 '\t' is unexpected。这将是我预期的错误,缺少此终端(但不是异常,也不是错误)。当我使用 hidden(WS) 时,语法变得可用。是的,它是从 org.eclipse.xtext.common.Terminals 复制的。在我不进入正题之前,hidden(...) 是干什么用的。
但到目前为止,感谢您的帮助。
最后一点是,如果这应该得到 xtext 的错误票。
我在xtext中创建了一个"language",用"MWE2 Workflow"可以生成没有错误。我还可以启动一个 eclipse 新实例并为特定语言创建一个文件。第一行也没有问题,但是当我尝试添加另一行时,此 eclipse 实例不再响应 seconds/minutes 并发生以下错误:
提示:
Unhandled event loop exception
Java heap space
堆栈跟踪:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at java.util.ArrayList.<init>(Unknown Source)
at com.google.common.collect.Lists.newArrayList(Lists.java:128)
at org.eclipse.xtext.ui.editor.model.DocumentTokenSource.setTokens(DocumentTokenSource.java:217)
at org.eclipse.xtext.ui.editor.model.DocumentTokenSource.computeDamageRegion(DocumentTokenSource.java:327)
at org.eclipse.xtext.ui.editor.model.DocumentTokenSource.updateStructure(DocumentTokenSource.java:249)
at org.eclipse.xtext.ui.editor.model.XtextDocument.fireDocumentChanged(XtextDocument.java:700)
at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191)
at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210)
at org.eclipse.jface.text.DefaultDocumentAdapter.replaceTextRange(DefaultDocumentAdapter.java:248)
at org.eclipse.swt.custom.StyledText.modifyContent(StyledText.java:7268)
at org.eclipse.swt.custom.StyledText.sendKeyEvent(StyledText.java:8111)
at org.eclipse.swt.custom.StyledText.doContent(StyledText.java:2481)
at org.eclipse.swt.custom.StyledText.handleKey(StyledText.java:5955)
at org.eclipse.swt.custom.StyledText.handleKeyDown(StyledText.java:5986)
at org.eclipse.swt.custom.StyledText.handleEvent(StyledText.java:5663)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1085)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1070)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1112)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1108)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1529)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4722)
at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:343)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4610)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:339)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:5023)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2549)
会话数据:
eclipse.buildId=4.4.2.M20150204-1700
java.version=1.8.0_31
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
Framework arguments: -product org.eclipse.platform.ide
Command-line arguments: -product org.eclipse.platform.ide -data <path>/../xtext_craass -dev <path>/emf/.metadata/.plugins/org.eclipse.pde.core/Eclipse CraAss Runtime/dev.properties -os win32 -ws win32 -arch x86_64
有一些(少数)相似的问题"topics",但到目前为止我可以看到,它们似乎是不同的问题:
- http://www.eclipse.org/forums/index.php/t/318571/
- https://bugs.eclipse.org/bugs/show_bug.cgi?id=449057
也许我在 xtext 文件中做错了什么:
grammar org.bs.craass.CraAss
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate craAss "http://www.bs.org/craass/CraAss"
CraAss:
functions += CAFunction*
main = CAMain
functions += CAFunction*;
CAMain:
'main'
commands += CACommand+
'done';
CAFunction:
'def' name=FUNCTION_TERMINAL
params += CAParam*
'body'
commands += CACommand+
'done';
CAParam:
'param' name=CAVariable;
CACommand:
CADec | CALoad | CAMov
| CAAdd | CASub | CAMul | CADiv
| CARead | CAPrint | CAPrintln
| CACall;
CACall:
'call' method=FUNCTION_TERMINAL params+=VAR_TERMINAL*;
CADec:
'dec' name=CAVariable;
CALoad:
'load' to=CACaches ',' value=INTEGER;
CAMov:
'mov' to=CACaches "," from=CACaches;
CAAdd:
'add' op1=CACaches "," op2=CACaches;
CASub:
'sub' op1=CACaches "," op2=CACaches;
CAMul:
'mul' op1=CACaches "," op2=CACaches;
CADiv:
'div' op1=CACaches "," op2=CACaches;
CARead:
'read' object=CARegister;
CAPrint:
'print' object=CARegister;
CAPrintln:
'println' object=CARegister;
CACaches:
(CAVariable | CARegister);
CAVariable:
dec=VAR_TERMINAL;
CARegister:
dec=REGISTER_TERMINAL;
terminal INTEGER : '-'?('0'..'9')+;
terminal VAR_TERMINAL : '_' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
terminal REGISTER_TERMINAL : ('ax' | 'bx' );
terminal FUNCTION_TERMINAL : (('a'..'z'|'_'|'0'..'9')*'.')?('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
希望有人能帮助我或知道问题所在。
看起来你是 Java,在 Heap space 中是 运行。
此问题的解决方案是增加 JVM 启动时使用的堆大小。为此,您需要使用启动参数 -xmx.
您必须在要启动的 eclipse 应用程序的 运行-configurations 中设置此参数。
经过一些工作,从错误语法构造到工作语法。我找到了一个(可能的)麻烦制造者。我需要以下行:
terminal WS : (' '|'\t'|'\r'|'\n')+;
这解决了 OutOfMemoryError,但我觉得很奇怪。错过这个,会导致这样的错误。添加此行后,语法仍然无法使用,并显示错误,例如 '\t' is unexpected。这将是我预期的错误,缺少此终端(但不是异常,也不是错误)。当我使用 hidden(WS) 时,语法变得可用。是的,它是从 org.eclipse.xtext.common.Terminals 复制的。在我不进入正题之前,hidden(...) 是干什么用的。
但到目前为止,感谢您的帮助。
最后一点是,如果这应该得到 xtext 的错误票。