-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Test for memory leaks #29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Tentatively assigned to myself, but please feel free to take over the bug. |
I think it's probably better to be more fuzzy about it. We have a memory leaks test in the IDE. |
Yes, it would be good to also have a memory cap test (which should be fuzzy) -- I may be wrong but I think @axel22 has this already working in scalameter. |
I have implemented Weak-tracking of Context's during all DottyTests. I believe that it's a better idea than to write customs tests. |
Merged and run with every test. |
Inline Nullify Policies in JavaNullInterop; combine two TypeMap
Some tests by Matt had cases where `.nn` figured prominently in the flamegraph. I optimized it so that the fast path is streamlined and inlined. In the following test code: ``` def x: String | Null = "abc" val y = x.nn ``` the new implementation is ``` 10: getstatic #20 // Field MODULE$:LTest$; 13: invokevirtual #24 // Method x:()Ljava/lang/String; 16: astore_0 17: getstatic #29 // Field scala/runtime/Scala3RunTime$.MODULE$:Lscala/runtime/Scala3RunTime$; 20: aload_0 21: invokevirtual #33 // Method scala/runtime/Scala3RunTime$.nn:(Ljava/lang/Object;)Ljava/lang/Object; 24: checkcast #35 // class java/lang/String 27: putstatic #37 // Field y:Ljava/lang/String; ``` The previous implementation was two bytes shorter, but contained in the critical path - A call to a ScalaRuntime method, which was not inlineable by the JIT compiler due to its size, - A conversion of a cmparison to a Boolean value (not sure this matters) - A cast from the return type `Object` to the actual type.
Some tests by Matt had cases where `.nn` figured prominently in the flamegraph. I optimized it so that the fast path is streamlined and inlined. In the following test code: ``` def x: String | Null = "abc" val y = x.nn ``` the new implementation is ``` 10: getstatic #20 // Field MODULE$:LTest$; 13: invokevirtual #24 // Method x:()Ljava/lang/String; 16: astore_0 17: getstatic #29 // Field scala/runtime/Scala3RunTime$.MODULE$:Lscala/runtime/Scala3RunTime$; 20: aload_0 21: invokevirtual #33 // Method scala/runtime/Scala3RunTime$.nn:(Ljava/lang/Object;)Ljava/lang/Object; 24: checkcast #35 // class java/lang/String 27: putstatic #37 // Field y:Ljava/lang/String; ``` The previous implementation was two bytes shorter, but contained in the critical path - A call to a ScalaRuntime method, which was not inlineable by the JIT compiler due to its size, - A conversion of a cmparison to a Boolean value (not sure this matters) - A cast from the return type `Object` to the actual type.
fix clearing filters and filter search optimalization
When compiling multiple times:
RootContext
System.gc()
RootContext
was gc-edThe text was updated successfully, but these errors were encountered: