2010-05-19 22 views
8

Başka bir java uygulamasından ayrı bir JVM dosyasında .jar dosyasını çağırmam gerekiyor ve çok fazla işlemci kullanıyor, bu nedenle geri kalanını etkilememek için arka plan önceliği ile çalışmalıdır. sistemi. Bunu yapmak için herhangi bir çapraz platform yöntemi var mı?Java süreci önceliğini değiştirmek için çapraz platform yolu

+0

* "bir kere yaz, herhangi bir yerde koş" * çapraz platform mantığı, no. Ancak her Un * x (OS X dahil) ve her Windows makinesinde çalışacak küçük bir taşınabilir olmayan kod parçası yapmak gerçekten zor değil. Stephen C'nin cevabı + 1. – SyntaxT3rr0r

cevap

3

Basit yanıt, Java'daki bir İşlemin önceliğini değiştirmek için taşınabilir bir yol olmamasıdır. (Threads - yes, Processes - no.)

Java uygulamanızın CPU yoğun uygulamasını çalıştırmak için yeni bir JVM başlatması gerekiyorsa, o zaman şansınız tamamen taşınabilir değildir. Örneğin, genellikle java komutunun (veya eşdeğerinin), -cp argümanının (veya eşdeğerinin), sisteme özgü JVM seçeneklerinin yol adını vermeniz gerekir.

Yani, JVM başlatmak için komut size başlatılan sürecin önceliğini değiştirmek için OS özgü şeyler yapar bir sarıcı komut dosyası ile komutu yerine eğer zaten olmayan taşınabilir, pek önemli olması gereken olduğunu varsayarak. (Örneğin, UNIX veya Linux için, JVM'yi başlatmak için nice'u kullanabilirsiniz.)

1

Dış işlem için önceliği belirleme yolunu bilmiyorum. Thread ancak setPriority yöntemi vardır, bu nedenle hedef uygulamayı kontrol ederseniz, belki asgari kendi önceliğini ayarlamak için uygulamayı anlatan bir anahtarı ekleyebilirsiniz:

theThread.setPriority(Thread.MIN_PRIORITY);

hala sistemini etkilerse, I CPU'yu boşaltmak için bazı kısa sleep araya girmenizi öneririz.


Başka bir seçenek: "başlatma" uygulamasının sınıf yolunda hedef .jar koyarsanız

, sadece yeni oluşturulan dizisindeki kavanoz-dosyanın main kullanılan yöntem çağırabileceği ve sonra yukarıdaki yöntemi kullanarak önceliği ayarlayın. (Bu, hedef jar dosyasının kaynak kodunu denetlemeseniz bile çalışmalıdır.)

+1

Anladığım kadarıyla başka bir süreç üretmesi gerekiyor ve bu yöntem bir iş parçacığı için, bu yüzden çalışabileceğini düşünmüyorum ... – Persimmonium

+0

oh .. hmm .. iyi nokta. Sanırım yürütülen programa bir anahtar ekleme olasılığı varsa, bunun sadece mantıklı olduğunu varsayalım. – aioobe

+0

Eğer çalıştırılan diğer işlemin kaynağına sahipse, kendini MIN_PRIORITY olarak ayarlayabilir, değil mi? –

İlgili konular