2017-11-08 117 views
9

Maven ve jar olarak başladığım zaman, Spring Boot uygulamamın başlangıç ​​zamanlarında büyük bir fark gördüm. 5 saniye Spring Boot uygulaması - "mvn spring-boot: run" ve "java -jar" ile başlangıç ​​zamanındaki farklar

  • java -jar myapp.jar - - 25 kavanoz dosyası gibi 5 kat daha uzun sürer başlayarak saniye

    • mvn spring-boot:run: Örneğin. Neden böyle? Uygulamayı Maven ve jar olarak başlatırken arka planda neler oluyor? Farklı bir şey yüklü mü? Ve Maven'in kullandığı zaman için kavanoz dosyasını başlatmak mümkün mü?

    +1

    kaynak kodunu görebilir? – SpaceTrucker

    +0

    'SpringApplication.run (MySpringBootApplication.class, args) 'dan önce ve sonra' new Date() 'yi ekledim. Bundan sonra farkı kaydettim. – Anna

    +0

    Ayrıca, maven ve java -jar myapp.jar' için ' true' kullanırken her işlemin süresini ölçebilir misiniz? – SpaceTrucker

    cevap

    8

    Bu fark (açıkça fork argüman set sürece) o aslında yeni Konuya olarak çalışan Maven JVM içinde çalıştırmak geldiğinde spring-boot:run aslında, Maven JVM iç Bahar Boot uygulamasını çalıştıran gerçeğine bağlı olabilir değil bir süreç. Bir iş parçacığı oluşturmak bir işlemden çok daha hızlıdır.

    Ama java -jar komut Süreç oluşturma gerekeceğini myapp.jar Üstüne üstlük vb bellek ayrılırken bir süreç kimliği istemeden gibi ona bağlı adımları vardır, bir işletim sistemi Süreci yaratacak çıkarılan artı JVM gibi herhangi optimizasyonu olmaz Kavanoz dosyasından ilk defa çıkarılan .class okunacak. Temel olarak soğuk bir başlangıç ​​zamanı alır.

    Sen süresini ölçmek nasıl oldu Maven Bahar Boot Eklentisi here

    +0

    Sorumu yanıtladığınız için teşekkür ederiz. ve yanlış '' pom.xml'imde false 'ile denedim ama sonuç aynıydı - Maven ile hala 5 saniyeye ihtiyacım var. Ayrıca "myapp.jar" paketini açtım ve "java-cp. \ Myapp org.springframework.boot.loader.JarLauncher" paketini kullandım ama sonuç aynıydı - 25 saniye. Başka neler deneyebilirim? – Anna

    +0

    Cevabını inanmak zor buluyorum. Süreç oluşturma saniyeler sürmez, muhtemelen en fazla milisaniyeyi, mikro saniye içinde alır. Maven'den kaçmak, sınıfların yüklenmesi ve jvm tarafından optimize edilmeleri gerçeğini değiştirmez. – Dariusz

    +0

    Başlangıçta bazı veritabanı başlatımı var, bu nedenle işlem çok yavaş. Ancak, Maven ile başlatmanın çok daha hızlı olduğu gerçeğini değiştirmez. Veritabanının başlatılmasını devre dışı bıraktığımda Maven ile 2 saniyeye ihtiyacım var ( true veya yanlış '). Kavanozu başlatmak 7 saniye sürüyor. Hala 3 kat daha yavaş. – Anna

    İlgili konular