| marp | true | ||
|---|---|---|---|
| theme | firat-theme | ||
| class |
|
'GraalVM', 'Java' ve diğer JVM dillerinde yazılmış uygulamaların yürütülmesini hızlandırmak için tasarlanmış yüksek performanslı bir JDK dağıtımıdır ve 'JavaScript', 'Ruby', 'Python' ve bir dizi başka popüler dil. GraalVMnin çok dilli yetenekleri, yabancı dil arama maliyetlerini ortadan kaldırırken birden çok programlama dilini tek bir uygulamada karıştırmayı mümkün kılar.
Oracle tarafından oluşturulan GraalVM. Üretime hazır ilk sürüm olan GraalVM 19.0, Mayıs 2019da yayınlandı. GraalVM'nin yaptığına eşdeğer bir başka teknoloji yoktur.
- Tek bir uygulamada birden fazla programlama dilini karıştırmak
- Yerel yürütülebilir dosyalar
İnanılmazhızlı önyükleme süresi- İnanılmaz derecede
düşük RSS belleği(yalnızca yığın boyutu değil!) Kubernetesgibi kapsayıcı düzenleme platformlarında anında (nispeten) ölçek büyütme ve yüksek yoğunluklu bellek kullanımı.
Uygulamamız için yerel yürütülebilir dosya, uygulama kodu, gerekli kütüphaneler, Java API'leri ve bir sanal makinenin küçültülmüş sürümünü içerecektir. `. Daha küçük VM tabanı, uygulamanın başlangıç zamanını iyileştirir ve ``minimum disk ayak izi`` üretir.
Truffle dil uygulama çatısı kendi kendini değiştiren Soyut Sözdizimi Ağaçları için yorumlayıcılar olarak araçlar ve programlama dilleri uygulamaları oluşturmaya yönelik açık kaynaklı bir kitaplıktır. Açık kaynak GraalVM derleyicisi ile birlikte, Truffle, mevcut dinamik diller çağında programlama dili uygulama teknolojisinde önemli bir adımı temsil ediyor.
- Spring Framework (Deneyimsel)
- Quarkus
- Play Framework
- Camel
- Prometheus
- JavaFX ...
- Bu yaklaşımın ana dezavantajı, platforma bağlı yerel koddur.
Bu, linux/windows vb. için kaynak kodunu derlemeniz gerektiği anlamına gelir.
Fırat________: Bazı durumlarda kullanılan kitaplıklardan veya derleme komut dosyalarından sorunlar çıkabilir. Yani testlere dikkat etmek gerekiyor.
................................................................
Oracle indirmelerinden GraalVM'yi indirin ve kurun. Bir Example.java dosyası oluşturun.
public class Example {
public static void main(String[] args) {
System.out.println("Hello GraalVM");
}
}#Aşağıdaki komutları çalıştırın:
javac Example.java
native-image Examplepackage org.acme.quickstart;
import io.quarkus.test.junit.NativeImageTest;
@NativeImageTest
public class NativeGreetingResourceIT extends GreetingResourceTest {
// Run the same tests
}GraalVM teknolojileri, üretime hazır ve deneysel olarak dağıtılır.
GraalVM'nin gelecekteki sürümleri için deneysel özellikler değerlendirilmektedir ve üretimde kullanılması amaçlanmamıştır. Geliştirme ekibi, deneysel özelliklerle ilgili geri bildirimleri memnuniyetle karşılar, ancak kullanıcılar, deneysel özelliklerin hiçbir zaman son sürüme dahil edilmeyebileceğini veya üretime hazır kabul edilmeden önce önemli ölçüde değişebileceğini bilmelidir.
Bu bilgiden sonra bireysel ihtiyacım için bir demo uygulaması yapmaya çalıştım.
Öncelikle şık kullanıcı arayüzüne sahip bir masaüstü uygulamasını tercih ettim. (Nispeten:))
Bu, uygulamanın ne yazık ki çok fazla bellek kullandığı anlamına gelir. Bu yüzden performansı artırmak için JavaFX ve ayrıca Gluon (yerel bir JavaFX çözümü) kullanmam gerekiyor.
Bu entegrasyon için sadece maven pom'uma bir eklenti ekledim. Şaşırtıcı bir şekilde, entegrasyon için bu yeterlidir.
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>gluonfx-maven-plugin</artifactId>
<version>1.0.2</version>
<configuration>
<target>host</target>
<mainClass>com.gnosis.cuteoverlay.Application</mainClass>
<reflectionList>
<list>com.gnosis.cuteoverlay.Application</list>
<list>com.gnosis.cuteoverlay.DataToSend</list>
<list>com.gnosis.cuteoverlay.DataToSendContainer</list>
</reflectionList>
<graalvmHome>C:\dev\tools\graalvm-svm-windows-gluon-21.2.0-dev</graalvmHome>
<nativeImageArgs>
<imageArg>-Dio.netty.noUnsafe=true</imageArg>
<imageArg>--report-unsupported-elements-at-runtime</imageArg>
<imageArg>--allow-incomplete-classpath --enable-all-security-services</imageArg>
<imageArg>--enable-url-protocols=https -H:EnableURLProtocols=http</imageArg>
<imageArg>-H:TraceClassInitialization=true</imageArg>
<imageArg>--initialize-at-build-time=${buildtime-classes}</imageArg>
<imageArg>--initialize-at-run-time=${runtime-classes}</imageArg>
</nativeImageArgs>
</configuration>
</plugin>Ana zaman harcama sorunu, derleme ve çalışma zamanı sınıflarını ayrıca Java'nın Reflection ı tarafından kullanılanları sınıflara ayırmaktır. Ayrıca bu listeler hangi kütüphaneleri kullandığınıza bağlıdır.
Birkaç denemeden sonra exe başarıyla hazırlandı.
#yerel çalıştıralabilir dosyayı hazırlar
mvn gluonfx:buildBundan sonra, exeyi ve iş mantığını çalıştırmak için ihtiyaç duyduğum diğer tüm yürütülebilir dosyaları kopyaladığım bir dağıtım klasörü oluşturdum.
# Jar Log
Uptime:781ms
StartTime:Wed Jun 30 02:02:09 EET 2021
Max heap memory is 4086 MBytes
Used non-heap memory is 32 MBytes# Native Image(exe) Log
Uptime:1ms
StartTime:Wed Jun 30 02:06:14 TRT 2021
Max heap memory is 0 MBytes
Used non-heap memory is 0 MBytesYıldırım hızında jvm başlangıç zamanı!
Bellek kullanımından 200MB tasarruf sağladık!
Kaynak koduna ve windows buildlerine git üzerinden ulaşabilirsiniz.










