Sol Reklam

Rehber Sunucularda Linux'mu Windows'mu Kullanılmalı? (+ OpenJ9, Paper, DNS)

Durum
Mesaj gönderimine kapalı.

LifeMCServer

Yaratık Tuzağı: Çalışıyor

Discord:

!?мυѕтαғα öɴcel#8713

Katılım
18 Kasım 2016
Mesajlar
698
Elmaslar
470
Puanlar
15.415
Yaş
24
Yer
İstanbul
Minecraft
LifeMCServer
Facebook
mustafathegamer
Twitter
LifeMCServer
Linux vs Windows

Kısa cevap: Linux
(ve OpenJ9 & Paper)

Uzun Cevap

Eğer Windows'a alıştıysanız ve bilmiyorsanız sunucunuzu direk Linux'a geçirmenizi tabii ki önermem fakat yine de denemeden zaten alışamazsınız, öğrenemezsiniz. Ekstra olarak sunucunuzda tabii ki (eğer ille de Windows kullanacaksanız) Windows yerine Windows Server kullanmalısınız, buradaki Windows onun için yaptığım kısaltma, sonuçta ikisi de Windows, sadece Server olan daha çok sunucu odaklı.

Linux'un Artıları

- Açık kaynak kodlu ve ücretsiz (dağıtımınıza göre değişebilir)
- İçerisinde Windows'da ki gibi yüzlerce gereksiz izleme aracı, servis, antivirüs adı altında kendisi virüs olup CPU'yu sömüren işlem yok.

- Netty Native Transport: IOException ve Time out tarzı hatalara son. Paketleriniz daha hızlı olacak ve GC'ye takılmayacak.
- IPTables: Bot saldırısı gibi sorunlar için kendi ayarlarınızı yapabileceğiniz gelişmiş güvenlik duvarı.

- Kendiliğinden FTP: Linux kendiliğinden varsayılan olarak SFTP içermekte, yani FTP sunucusu kurmanıza gerek yok. Makinenizin normal şifresi ve kullanıcı adı ile 22 portundan girebiliyorsunuz.

- RDP Brute Force Saldırıları Yok: Windows sunucularda eğer IP adresiniz yaygın ise veya paylaşımlı bir hostingde iseniz risk altındasınız, uzak masaüstünüze sürekli giriş istekleri yollayarak şifrenizi bulabilirler. Bunun dışında sizden habersiz sistemdeki Administrator hesabına giriş / çıkış yapılabilir. Kısaca Linux, hem güvenlik, hem performans olarak Windows'dan öndedir.

Linux'a geçmek için hostinginize bilgi verebilirsiniz. Ekstra olarak veri merkezi ve işlemci kalitesi nedeniyle almanya lokasyon sunucular öneririm. Eğer türkiye lokasyon ryzen veya i9 sunucular ile hem ping hem performans istiyor iseniz hosting olarak Keyubu önerebilirim.

Netty Native Transport

Bu, sunucularda paket ile istemci ve sunucu arasındaki iletişim için kullanılan Netty Java kütüphanesinin performans kritiği kısımlarının Java yerine direk C programlama dili ile yazılmış olan Native kütüphanesidir. Sadece Linux ve MacOS'da çalışıyor diye hatırlıyorum. Sunucu konsolunuzda eğer "Using default channel type" görüyorsanız işletim sisteminiz Netty Native Transport desteklemiyordur.

Netty Native Transport varsayılan olarak açık gelir ve Minecraft 1.8.8 veya herhangi bir daha üst sürümde çalışacaktır. Eğer işletim sisteminiz desteklemiyor ise açık olsa bile bir efekti olmayacaktır. Eğer konsolunuzda veya log dosyalarınızda "Using epoll channel type" gördüyseniz o zaman sunucu sürümünüz ve işletim sisteminiz Netty Native Transport destekliyordur ve Netty Native Transport açıktır.

Peki bunun artısı ne?

Java genel olarak C'ye yakın ve hatta (optimizesiz kodlanmış bir C koduna göre) daha iyi bir performans verebilir. Fakat gecikmeye sebep olan şey aslında RAM almak değildir; alınan RAM'i boşaltmaktır. Java'da objeleri silemezsiniz; GC otomatik olarak çalışır, referansları kaydeder, analiz eder ve gereksiz objeleri siler.

Bu genel olarak şöyle geçer: "Lower from performance to increase programmer productivity"
Yani Java ile daha hızlı ve modern kodlarsınız, fakat eğer performans kritiği bir şeyler yapıyor iseniz, Java bunun için pekte doğru bir dil değil.

Her neyse, kısaca Netty Native Transport, Netty'nin optimizeli C ile yazılmış bir versiyonu. Sunucunuzda IOException, Disconnected, Timeout tarzı mesajlar ile oyuncularınız sürekli kick yiyorsa Netty Native Transport kullanan bir işletim sistemine geçmenizin artısı olabilir.

OracleJDK vs OpenJDK vs OpenJ9

Aslında bu konuyla pek alakası yok fakat Linux'a geçtiğinizde sunucunuzu aktarmak için yapacağınız ilk işlemin Java yüklemek olduğunu varsayarsak (eğer dağıtımınıza göre zaten yüklü gelmiyorsa) hangi Java dağıtımını yükleyeceğiniz de diğer bir önemli nokta.

Windows'da biliyoruz ki hepiniz Oracle'nin sitesinden veya java.com üzerinden Java 8 yüklüyorsunuz. Fakat Oracle'den yüklediğiniz bu Java sürümleri açık kaynak kodlu değil ve normalde ücretli olarak alınıyor, sadece geliştirme amaçlı olarak dağıtılıyor.

Bu yüzden Linux'da OracleJDK yerine OpenJDK kullanmalısınız. Aralarında zaten neredeyse hiç fark yok. Fakat bir diğer başlığımız ise OpenJDK vs OpenJ9.

OpenJ9

OpenJ9, Eclipse Foundation tarafından geliştirilen açık kaynak kodlu, OpenJDK bazlı bir Oracle HotSpot VM alternatifi, OpenJ9 VM olarak da geçer. Eskiden IBM tarafından geliştiriliyormuş fakat şuanda Eclipse geliştiriyor.

OracleJDK ve OpenJDK'ya göre daha iyi varsayılanları ve performansı olduğunu iddia ediyor; ki testlerime göre de öyle. Bu yüzden size OpenJ9 tavsiye ediyorum çünkü büyük bir performans artışı sağlıyor.

Tabii ki OpenJ9'u sadece Linux'da kullanabilirsiniz diye bir şey yok; Windows'da da kullanabilirsiniz.
Fakat yine de sırf Netty Native Transport için bile Linux'a geçmenizi öneririm.

OpenJ9: OpenJ9

Hangi Java Sürümü?

Bunu daha farklı bir konu olarak yakında açacağım fakat MC sürümünüze göre Java sürümlerini size şu şekilde önerebilirim:

MC <= 1.12.2: Java 8
(MC 1.12.2 altının Java 9+ desteklediğini bile sanmıyorum)

MC 1.13.2: Java 11
(Eklentilerinizin uyumlu olduğunu varsayarsak)

MC 1.14.4: Java 12
(Eklentilerinizin uyumlu olduğunu varsayarsak)
(Java 13 henüz çok yeni fakat sunucu açılışını hızlandırıyor, eklentileriniz uyumlu ise Java 13 kullanmanızı tavsiye ederim.)

MC 1.13.2'de de Java 12 kullanabilirsiniz, 1.12.2'de de Java 11 kullanabilirsiniz, vesaire. Fakat bunlar sadece benim önerilerimdir. Java 11 LTS olduğu için ve MC 1.14.4'de çok yeni olduğu için 1.13.2'de Java 11, 1.14.4'de ise 12 öneririm.

Yine de size tavsiyem sadece Java 8 ve Java 11 gibi LTS sürümlerini, Linux ve OpenJ9 ile birlikte kullanmanız. "Her şey tamam, peki sunucu yazılımı ne olacak?" diyorsunuz sanırım, evet, hemen ona da geçelim.

Sunucu Yazılımı

Şu konuda bunlardan biraz bahsetmiştim. Tarihsel ve detaylı bilgi için ona bakabilirsiniz. Bu konu sadece tavsiye konusu olduğu için direk size hangisini önerdiğime geçeceğim. Sizlere önerim Paper ve bazı eski sürümler için onun bazı eski varyasyonları.

Paper eskiden biliyorsunuz ki PaperSpigot olarak geçiyordu. Fakat daha sonrasında Spigot kısmı kaldırıldı ve artık direk Paper olarak geçiyor.
Biliyorsunuz ki Paper'ın bir de forkları var; en bilinen birtanesi Taco diye geçen TacoSpigot. Bu biraz eski fakat MC 1.8.8 için hala güncel bir paper altyapısı içerdiğinden, MC 1.8.8 için TacoSpigot'u öneriyorum.

MC 1.12.2 ve üstünde ise TacoSpigot kullanmanızı önermem çünkü kullandığı Paper altyapısı eski. Son güncellenen 1.13.2 ve 1.14.4 (+ 1.15 çıktığında 1.15 ve üstü sürümler dahil) sürümleri için PaperMC sitesini ziyaret edebilirsiniz.

Güncelleme: 1.12.2 artık desteklenmediği için siteden kaldırıldı, yine de buradan son 1.12.2 yapılandırmasını indirebilirsiniz.

Unutmayın ki 1.13.2 altı sürümler son gelen performans güncellemelerini, yeni gelen bir ton ayarı içermiyor ve sadece güvenlik açıkları çözülüyor.
Eğer PvP'yi sevmiyor iseniz belli eklentiler ile PvP cooldown'ununu kaldırabilir veya PvP güncellemesi olacağı söylenen Minecraft 1.15'i bekleyebilirsiniz.
(bu konuyu yazarken ilk snapshot yayınlanmamıştı)

Ekstra:
CloudFlare DNS ve Zaman Sunucusu


Ekstra olarak sunucu makinenizde ve kendi sunucunuzda DNS sunucusu olarak CloudFlare DNS ve Zaman Sunucusu'nu kullanabilirsiniz. Performans veya herhangi bir şey ile alakası pek yok - ISP'nizin normal DNS'sine göre daha hızlı olup Google DNS'ye göre de hafif daha hızlı olması dışında - fakat yine de belirtmek istiyorum.

CloudFlare DNS ve Zaman Sunucusunu bende aktif olarak kullanıyorum ve memnunum. Daha fazla bilgi için aşağıdaki linkleri ziyaret edebilirsiniz, eminim sorularınızı cevaplayacaktır.

CloudFlare DNS: 1.1.1.1 — the Internet’s Fastest, Privacy-First DNS Resolver
(Virüs değildir, 1.1.1.1, doğru duydunuz!)

Zaman Sunucusu: Cloudflare Time Services | Cloudflare
(Bu henüz pek bilinmiyor ama yine de tavsiye ederim)​
 

Avelis

Ruh + Kum = Ruh Kumu
Katılım
24 Ağustos 2019
Mesajlar
1.302
Elmaslar
837
Puanlar
9.875
Konu yararlı ancak konu düzenini geliştirmelisin, başarılar.
 

samoi

one is glad to be of service
Emekli

Discord:

mudlusamoi#5646

Katılım
28 Ekim 2014
Mesajlar
3.549
Elmaslar
1.382
Puanlar
19.760
Yaş
24
Yer
Bursa
Minecraft
smt287
Müsait olduğum bir vakit bulduğum zaman okuyacağım, ilgimi çekti. Konu için teşekkürler.
 
S

Silinen üye 79251

Ziyaretçi

Sunucu açmayı düşünen arkadaşlar için gayet yararlı bir "Rehber" konusu olmuş. Bu tür konularının devamını bekliyor olacağım.
 

KadirYLCN

Odunlara Vur Vur Vur!
Katılım
28 Mart 2015
Mesajlar
26
Elmaslar
4
Puanlar
8.925
Yaş
23
Başarılı ve yararlı konu olmuş.
 

Zen-G

oyna.StarkNetwork.xyz

Discord:

Armağan Karakurt#4954

Katılım
21 Şubat 2020
Mesajlar
21
Elmaslar
8
Puanlar
0
Yaş
21
Yer
Almanya Kreuzberg
Minecraft
ALP_HARD
Sağlam Bir Rehber Olmuş Ellerinize Sağlık.
 

Kalerda

Vatan Sevdalısı
Katılım
13 Ağustos 2015
Mesajlar
641
Elmaslar
589
Puanlar
15.030
Yer
Türkiye
Konu güzel ve yararlı fakat bazı kritik bilgi yanlışları var. Benim yakaladıklarım ve tekrar araştırmanı istediklerim:

1- Java nesne yönelimli programlamada kullanılan en performanslı dildir. Bunu sağlayan ise JVM' in garbage collection adı altında nesne birikintisini yönetmesidir. C tabanlı dillerle arasındaki farkı oluşturan etkenlerden biri de budur. Çeşitli platformlarda buna yönelik deney sonuçları var.
 
S

Silinen üye 116132

Ziyaretçi
Öncelikle ben WindowsServer tercih ederdim. Windows'da kendiliğinden FTP ya da SFTP olmayabilir fakat UzakMasaüstüBağlantısı adı altında ftpden daha yararlı bir özellik söz konusu ki bu linux'da hiçbir şekilde desteklenen güvenli bir yazılımı yok. Ayrıca o CPU yiyor dedikleriniz linux'da tek başlık altında toplanmış durumdadır, windows yaklaşık %2 cpu kullanırken linux'da kaynak kodu değiştirilmesi sonucu optimizasyon eksikleri yüzünden bu oran %8lere çıkabiliyor.

Daha başka bir konu ise Java ile ilgili yoğun yanlışlar... Java c tabanlı dillere göre daha hızlı olabiliyor, tabii ki işi bilirsen bu çok yararlı oluyor, özellikle c tabanlı (özellikle c#) windows için uygun görülürken Java crossplatforming çalışabildiği için böyle bir seçenek hakkımız oluyor. Ayrıca Java'nın onaylı test sonuçlarına göre çoğu işlemde c tabanlı dillerden daha gelişmiş olduğunu görebilirsiniz.
RAM ile ilgili birkaç şey eklemek istiyorum, ram geçici bir bellektir ve veriler vs kaydedilmeden önce ram'e kaydedilir, sonra bu veriler buradan silinir. Kabaca açıklaması budur, "Java'da objeleri silemezsiniz" demişsiniz fakat zaten bu olması istenen bir şey değildir. Gereksiz olanlar zaten silinecektir ki c tabanlı diller Java'ya göre oldukça eksik yönleri var.


Bunların dışında yararlı bilgiler var fakat windows'u savunan bir konu da yazılmış olsaydı daha uzun olacaktı çünkü dayanağı fazla olacaktı yazan kişinin.
 

LifeMCServer

Yaratık Tuzağı: Çalışıyor

Discord:

!?мυѕтαғα öɴcel#8713

Katılım
18 Kasım 2016
Mesajlar
698
Elmaslar
470
Puanlar
15.415
Yaş
24
Yer
İstanbul
Minecraft
LifeMCServer
Facebook
mustafathegamer
Twitter
LifeMCServer
Konu güzel ve yararlı fakat bazı kritik bilgi yanlışları var. Benim yakaladıklarım ve tekrar araştırmanı istediklerim:

1- Java nesne yönelimli programlamada kullanılan en performanslı dildir. Bunu sağlayan ise JVM' in garbage collection adı altında nesne birikintisini yönetmesidir. C tabanlı dillerle arasındaki farkı oluşturan etkenlerden biri de budur. Çeşitli platformlarda buna yönelik deney sonuçları var.

Yanlış bilgi olduğunu sanmıyorum; en performanslı dil değildir bunu ilk olarak belirtmeliyim. Java high-level bir dildir yani programmer productive fakat daha native, low-level C++, C gibi dillere göre daha performanssız bir dildir. JVM'nin Garbage Collection sistemi objeleri manuel olarak silmekten bizi kurtarır fakat bu arka planda objeleri izleyip, depolayıp kullanılıp kullanılmadığını kontrol edip, referansları depolayıp daha sonra sileceğinden performans kaybı yaşatır. C++/C'da ise siz objeleri ihtiyacınız olmadığında manuel olarak silersiniz; arka planda referansları toplayan, izleyen bir şey olmaz bu nedenle daha hızlı olur. Sadece bu yönden de değil; direkt olarak spesifik işletim sisteminin low-level API'lerini çağıracağınız veya kernelle iletişime geçeceğiniz için Java'ya göre yine gözle görülür bir perforamans farkı olacaktır. Fakat günümüzde Java'nın daha çok tercih edilmesinin nedeni kolaylığı ve JIT optimizesinin gözle görülür performans kayıplarını azaltmasıdır. Bahsettiğiniz deney sonuçlarınızı atarsanız incelemek isterim.

Öncelikle ben WindowsServer tercih ederdim. Windows'da kendiliğinden FTP ya da SFTP olmayabilir fakat UzakMasaüstüBağlantısı adı altında ftpden daha yararlı bir özellik söz konusu ki bu linux'da hiçbir şekilde desteklenen güvenli bir yazılımı yok. Ayrıca o CPU yiyor dedikleriniz linux'da tek başlık altında toplanmış durumdadır, windows yaklaşık %2 cpu kullanırken linux'da kaynak kodu değiştirilmesi sonucu optimizasyon eksikleri yüzünden bu oran %8lere çıkabiliyor.

Daha başka bir konu ise Java ile ilgili yoğun yanlışlar... Java c tabanlı dillere göre daha hızlı olabiliyor, tabii ki işi bilirsen bu çok yararlı oluyor, özellikle c tabanlı (özellikle c#) windows için uygun görülürken Java crossplatforming çalışabildiği için böyle bir seçenek hakkımız oluyor. Ayrıca Java'nın onaylı test sonuçlarına göre çoğu işlemde c tabanlı dillerden daha gelişmiş olduğunu görebilirsiniz.
RAM ile ilgili birkaç şey eklemek istiyorum, ram geçici bir bellektir ve veriler vs kaydedilmeden önce ram'e kaydedilir, sonra bu veriler buradan silinir. Kabaca açıklaması budur, "Java'da objeleri silemezsiniz" demişsiniz fakat zaten bu olması istenen bir şey değildir. Gereksiz olanlar zaten silinecektir ki c tabanlı diller Java'ya göre oldukça eksik yönleri var.


Bunların dışında yararlı bilgiler var fakat windows'u savunan bir konu da yazılmış olsaydı daha uzun olacaktı çünkü dayanağı fazla olacaktı yazan kişinin.

Linux'da SSH vardır ve uzak masaüstünde yapabileceğiniz her şeyi yapabilirsiniz. Bu sadece bir FTP değildir. Hiç bir güvenli yazılım olmadığını da nereden çıkardınız acaba? Linux'un daha fazla CPU yediği gibi saçma sapan bir kanıya nasıl vardınız acaba? Hayatınızda hiç Linux kullandınız mı? Yazdığınız fikirleri destekleyen bir tane akamedik değeri olan makale gönderebilir misiniz?

"Ayrıca Java'nın onaylı test sonuçlarına göre çoğu işlemde c tabanlı dillerden daha gelişmiş olduğunu görebilirsiniz." bakın efendim, gelişmişten kastınız eğer dil özelliği olarak ise evet, Java mantıken C ve C++'dan daha sonra çıktığından daha modern veya gelişmiş dil özellikleri içermesi muhtemel; fakat performans konusunda C ve C++ yukarıda anlattığım sebepler nedeniyle Java'dan çok daha performanslıdır; bunu nerede araştırırsanız araştırın bu sonuca varırsınız. Bahsettiğiniz "onaylı test sonuçlarını" atarsanız yine incelemek isterim, tabii öyle testler var ise :D

""Java'da objeleri silemezsiniz" demişsiniz fakat zaten bu olması istenen bir şey değildir. Gereksiz olanlar zaten silinecektir"

Efendim, hayır bu istenen bir şeydir. "Gereksiz olanların zaten silinmesi" diye basitçe diyerek geçtiğiniz şeyde bitiyor iş. Java objelerin ne zaman gereksiz olduğunu bilemez, bunu ancak programcı bilebilir. Java gereksiz objeleri silmek için objenin aktif olarak kullanılıp kullanılmadığını izliyor, takip ediyor. Bu işlemde arka planda çalışıyor ve performans kaybına yol açıyor; objelerin referansları izleniyor.

Biraz ingilizce akademik makaleler okuyup kendinizi geliştirmeniz ve programlama dilleri öğrenmeniz tavsiyem; sırf siz Windows kullanıyorsunuz, SSH nedir, Vim nedir, Linux nedir, C & C++ nedir bilmiyorsunuz diye sizin kullandığınız bildiğiniz şeyler daha iyi olacak diye bir şey yok; kaldı ki en iyisini kullanacaksınız diye bir kuralda yok siz Linux'un daha iyi olduğunu kabul edebilir fakat günlük kullanım için Windows kullanabilirsiniz bunda bir yanlış yok ben konuda profosyonel açıdan maximum performansa, güvenliğe ve configurability/customazibility'e erişmek için gerekenlerden bahsettim.
 

Abdullah T.

Nötr
Yasaklandı

Discord:

Abdullah T.#0001

Katılım
19 Nisan 2018
Mesajlar
1.524
Elmaslar
1.083
Puanlar
5.650
Yer
Kocaeli/Gebze
Minecraft
JordJarv
Merhaba, konu gayet güzel anlatılmış eline sağlık :)) eğer linux kullanmayı bilmeyenler varsa bunun içinde benim bir konum vardır.
iyi forumlar dilerim.
 
S

Silinen üye 116132

Ziyaretçi
@LifeMCServer işim olmasa kanıtlardım ama saçma iddialarla uğraşsaydım yol alamazdım. JAVA performans olarak da c tabanlı dillerden çoğu durumda üstün ve linux editlendiğinde optimizasyon hataları nedeniyle cpu kullanımı değişecektir. Bunları belirttim, ya tam okumadınız ya da ne bilim'
 

Kalerda

Vatan Sevdalısı
Katılım
13 Ağustos 2015
Mesajlar
641
Elmaslar
589
Puanlar
15.030
Yer
Türkiye
Yanlış bilgi olduğunu sanmıyorum; en performanslı dil değildir bunu ilk olarak belirtmeliyim. Java high-level bir dildir yani programmer productive fakat daha native, low-level C++, C gibi dillere göre daha performanssız bir dildir. JVM'nin Garbage Collection sistemi objeleri manuel olarak silmekten bizi kurtarır fakat bu arka planda objeleri izleyip, depolayıp kullanılıp kullanılmadığını kontrol edip, referansları depolayıp daha sonra sileceğinden performans kaybı yaşatır. C++/C'da ise siz objeleri ihtiyacınız olmadığında manuel olarak silersiniz; arka planda referansları toplayan, izleyen bir şey olmaz bu nedenle daha hızlı olur. Sadece bu yönden de değil; direkt olarak spesifik işletim sisteminin low-level API'lerini çağıracağınız veya kernelle iletişime geçeceğiniz için Java'ya göre yine gözle görülür bir perforamans farkı olacaktır. Fakat günümüzde Java'nın daha çok tercih edilmesinin nedeni kolaylığı ve JIT optimizesinin gözle görülür performans kayıplarını azaltmasıdır. Bahsettiğiniz deney sonuçlarınızı atarsanız incelemek isterim.



Linux'da SSH vardır ve uzak masaüstünde yapabileceğiniz her şeyi yapabilirsiniz. Bu sadece bir FTP değildir. Hiç bir güvenli yazılım olmadığını da nereden çıkardınız acaba? Linux'un daha fazla CPU yediği gibi saçma sapan bir kanıya nasıl vardınız acaba? Hayatınızda hiç Linux kullandınız mı? Yazdığınız fikirleri destekleyen bir tane akamedik değeri olan makale gönderebilir misiniz?

"Ayrıca Java'nın onaylı test sonuçlarına göre çoğu işlemde c tabanlı dillerden daha gelişmiş olduğunu görebilirsiniz." bakın efendim, gelişmişten kastınız eğer dil özelliği olarak ise evet, Java mantıken C ve C++'dan daha sonra çıktığından daha modern veya gelişmiş dil özellikleri içermesi muhtemel; fakat performans konusunda C ve C++ yukarıda anlattığım sebepler nedeniyle Java'dan çok daha performanslıdır; bunu nerede araştırırsanız araştırın bu sonuca varırsınız. Bahsettiğiniz "onaylı test sonuçlarını" atarsanız yine incelemek isterim, tabii öyle testler var ise :D

""Java'da objeleri silemezsiniz" demişsiniz fakat zaten bu olması istenen bir şey değildir. Gereksiz olanlar zaten silinecektir"

Efendim, hayır bu istenen bir şeydir. "Gereksiz olanların zaten silinmesi" diye basitçe diyerek geçtiğiniz şeyde bitiyor iş. Java objelerin ne zaman gereksiz olduğunu bilemez, bunu ancak programcı bilebilir. Java gereksiz objeleri silmek için objenin aktif olarak kullanılıp kullanılmadığını izliyor, takip ediyor. Bu işlemde arka planda çalışıyor ve performans kaybına yol açıyor; objelerin referansları izleniyor.

Biraz ingilizce akademik makaleler okuyup kendinizi geliştirmeniz ve programlama dilleri öğrenmeniz tavsiyem; sırf siz Windows kullanıyorsunuz, SSH nedir, Vim nedir, Linux nedir, C & C++ nedir bilmiyorsunuz diye sizin kullandığınız bildiğiniz şeyler daha iyi olacak diye bir şey yok; kaldı ki en iyisini kullanacaksınız diye bir kuralda yok siz Linux'un daha iyi olduğunu kabul edebilir fakat günlük kullanım için Windows kullanabilirsiniz bunda bir yanlış yok ben konuda profosyonel açıdan maximum performansa, güvenliğe ve configurability/customazibility'e erişmek için gerekenlerden bahsettim.

Öncelikle cevap yazmaya uğraşıp güzel bir tartışma ortamı oluşturmuşsun. Bu yüzden söylediklerimi agresif olarak anlamayıp olgun bir şekilde kendi bildiklerini aktardığın için teşekkür ederim.

Java elbette söylediğiniz sebeplerden ötürü kaynak tüketimi ve hız bakımından C/C++'dan geridedir. Fakat yazılımda çeşitli dinamikleri yalnızca bir noktadan değerlendiremezsiniz. Genel olarak bakıldığında Java'nın diğer dillerden daha üstün olduğu gözüküyor. Performanslıdan kastım ise çoğu işlemi manuel olarak yapmak zorunda kalmamanız ve ergonomik kolaylığıdır. Java 8 ve sonrasında ise multi-threading gibi işlemlerde C/C++ 'ın önüne geçtiği de araştırma sonuçlarında görülebilir.
Altta bulduklarım yalnızca 2 örnektir. Biraz araştırırsanız daha derin sonuçlara ulaşabilirsiniz. İyi forumlar dilerim..



 

LifeMCServer

Yaratık Tuzağı: Çalışıyor

Discord:

!?мυѕтαғα öɴcel#8713

Katılım
18 Kasım 2016
Mesajlar
698
Elmaslar
470
Puanlar
15.415
Yaş
24
Yer
İstanbul
Minecraft
LifeMCServer
Facebook
mustafathegamer
Twitter
LifeMCServer
@LifeMCServer işim olmasa kanıtlardım ama saçma iddialarla uğraşsaydım yol alamazdım. JAVA performans olarak da c tabanlı dillerden çoğu durumda üstün ve linux editlendiğinde optimizasyon hataları nedeniyle cpu kullanımı değişecektir. Bunları belirttim, ya tam okumadınız ya da ne bilim'

O zaman lütfen konumu yorumlarınızla kirletmek yerine "çok önemli işlerinizle" ilgilenmeye devam ediniz lütfen. Saçma iddialar atan sizsiniz. Kime sorarsanız nerede araştırırsanız araştırın Linux'un Windows'a göre daha güvenlikli, özelleştirilebilir ve performanslı olduğu cevabına erişirsiniz. Editlendiğinde'den kastınız ne bilmiyorum fakat Linux Kernel'i sandığınızdan daha stabil, iki ayar değiştirdiniz oynama yaptınız diye neden cpu kullanımı anormal şekilde yükselsin?

Bu arada evet; ya da ne bileyim yerine ya da ne bilim' yazarak çok havalı oldunuz şuan. Tebrik ederim.

Ha bir de son olarak sizden düşüncelerinizi destekleyen akamedik makale atmanızı istedim fakat görüyorum ki bir şey atmamışsınız; o halde akamedik makale atmanıza da gerek yok; Google'a basitçe "Linux vs Windows" yazarsanız bile şu sonuca erişebilirsiniz.

1582978606570.png


Bakınız, Linux'un daha performanslı olduğundan ve Windows'un telemetri verileri toplayarak gizliliğinizi tehtid edip aynı zamanda da performans sorunlarına yol açtığından bahsediyor. Linux'un açık kaynak ve ücretsiz olup Windows'un closed-source ve ücretli olmasına değinmiyorum bile; seçim sizin; bu gibi basit ve cevabı belli bir konuda daha fazla tartışmak istemiyorum fakat tabii ki mantıklı argümanlar sunabilirseniz sizinle de seviyeli bir şekilde tartışmak isterim.

Öncelikle cevap yazmaya uğraşıp güzel bir tartışma ortamı oluşturmuşsun. Bu yüzden söylediklerimi agresif olarak anlamayıp olgun bir şekilde kendi bildiklerini aktardığın için teşekkür ederim.

Java elbette söylediğiniz sebeplerden ötürü kaynak tüketimi ve hız bakımından C/C++'dan geridedir. Fakat yazılımda çeşitli dinamikleri yalnızca bir noktadan değerlendiremezsiniz. Genel olarak bakıldığında Java'nın diğer dillerden daha üstün olduğu gözüküyor. Performanslıdan kastım ise çoğu işlemi manuel olarak yapmak zorunda kalmamanız ve ergonomik kolaylığıdır. Java 8 ve sonrasında ise multi-threading gibi işlemlerde C/C++ 'ın önüne geçtiği de araştırma sonuçlarında görülebilir.
Altta bulduklarım yalnızca 2 örnektir. Biraz araştırırsanız daha derin sonuçlara ulaşabilirsiniz. İyi forumlar dilerim..




Genel olarak bakıldığında Java'nın diğer dillerden daha üstün olduğu gözüküyor.

Üstünlükten kastınız nedir? Zaten Java özellik bakımından high-level ve daha sonra çıkan bir dil olduğu için C/C++'ya göre daha özelliklidir. Buna "üstünlük" gibi genel bir şey denemez tabii ki, dil özellikleri veya kolaylıkları olarak bakılır. Ana tartışmamız ise bunun üzerine değil; performans üzerine.

Kaldı ki "diğer dillerden daha üstün olduğu gözüküyor" gibi bir genelleme yapmışsınız, sadece C/C++'dan da bahsetmemişsiniz. Yanlış. Örneğin mesela Java, C#'a göre hem dil özellikleri hem de performans açısından daha geridedir.

Bu tür genellemeler yapmamız tabii ki yanlış olabilir, iki dilin de beğenip beğenmediğiniz yanları/özellikleri olabilir fakat mantıken C# daha sonra çıkmıştır ve Java'nın dizayn hatalarından ders almıştır; bu nedenle Java'ya göre daha gelişmiş olması çok normal.

Burada benim amacım Java'yı eleştirmek, kullanmayın veya çöp demek değil sadece C ailesi dillerin daha performanslı olduğundan bahsetmek; yoksa zaten konuda da Java kullanmayın gibi bir ibare bulamazsınız Netty Native Transport'da JNI köprüsü ile C++ hooklu çalışan bir kütüphanedir; sadece garbage collection yerine manuel denetim yaptığından daha performanslıdır, referans bilgisi tutmaz, cpu'dan yemez, objeleri bir anda silerek donmalara yol açmaz.

Performanslıdan kastım ise çoğu işlemi manuel olarak yapmak zorunda kalmamanız ve ergonomik kolaylığıdır.

Performanstan kastınız programmer productivity (yazılımcının, kodlayan kişinin performansı) ise evet, doğrudur. Java mantıken daha kolay ve daha otomatik bir dildir; yazılımcıya daha az iş düşer, bu nedenle daha hızlı kodlama yapabilirsiniz.

Fakat yazdığınız kodun performansından bahsediyor iseniz, insanların hata yapma durumunu göz ardı edersek (objeleri silmeyi unutmak vb, ki bunlar için de analiz araçları mevcut) Garbage Collection'dan ziyade objeleri manuel silmek daha performanslıdır. Aynı şekilde Java'nın high-level API'lerini çağırmaktansa low-level daha native'e yakın bir dilde (Assembly, C, C++ gibi) işletim sistemine spesifik API'leri çağırmak veya direkt olarak kernelle/hardware ile iletişime geçmek daha performanslıdır.

Java 8 ve sonrasında ise multi-threading gibi işlemlerde C/C++ 'ın önüne geçtiği de araştırma sonuçlarında görülebilir.

Multi-Threading sistemi low-level dillerde de vardır; sadece Java kadar geniş/kolay API'ler sunmaz bu nedenle programcıya daha çok iş düşer fakat yine dediğim gibi JIT optimizeleri de dahil iyi kodlanmış bir C/C++ kodu yine iyi kodlanmış bir Java kodundan kodsal runtime/yürütme performansı açısından daha öndedir.

Burada tabii ki optimizesiz bir C/C++ kodu ile Java kodunu karşılaştırırsanız Java Compiler'ın veya JIT'in yaptığı optimizeler Java kodunu öne geçirebilir veya bilgisiz kodlanan bir C/C++ kodu ile Java kodunu karşılaştırırsanız C/C++'da çoğu şeyi programcının yapması gerektiğinden C/C++'da bilgisiz olan birisi objeleri silmeyi unutup memory leaklere yol açabilir veya bu gibi diğer hatalar yapabilir; bu durumda da Java kodu öne geçebilir; fakat genel olarak C/C++, Java'ya göre daha performanslıdır.

Düzgün kodlanmış, düzgün bir algoritmaya sahip kod hangi dille olursa olsun gözle görülür bir performans kaybı yaratmaz; fakat performans'dan bahsediyor ve şu dil bu dilden daha iyi diyor iseniz gözle görülür performansı değil, milisaniyelik farkları bile ele almanız gerekmekte.

Java'da siz Java kodu yazarsınız, bu .JAR dosyası oluşturulurken bytecode olur, daha sonra uygulamayı çalıştırdığınızda Java bu kodları okur, JIT optimizesinden geçirir, garbage collection sistemini hazır eder, arka planda referansları izler, sizin yazdığınız işletim sistemi ile iletişime geçen kodlar (JNI/JNU/JNA gibi C/C++ hooklarını yoksayarsak) önce Java API'lerine gider daha sonra işletim sistemine oradan kernele, oradan işlemciye gider. Bu da daha fazla gecikmeye yol açar, direkt olarak işletim sistemi veya kernel, hardware ile iletişime geçebilecekken araya Java API'lerini, Java'yı sokarsınız.

Attığınız makalelere gelecek olursak; ikisi de C++ ile herhangi bir karşılaştırma yapmamakta ve sadece genel Java performansından ve gözle görülür derecede bir fark olmamasından bahsetmekte, fakat işi detayları ve milisaniyelik farkları bile dikkate alacak şekilde ele alırsanız low-level dillerin her zaman daha performanslı olduğunu görebilirsiniz.

Hatta çoğu durumda gözle görülür farklarda oluşabilmekte; Java'nın Garbage Collection dediğiniz işlemi tüm gereksiz olarak algıladığı objeleri bir anda siler bu da donmalara yol açar. C/C++'da ise siz ihtiyacınız olmadığında teker teker silersiniz, hepsini bir listeye alıp, gerekip gerekmediğini takip edip gerekmeyenleri bir anda silmezsiniz.

Son olarak; attığınız Wikipedia makalesini okudunuz mu bilmiyorum fakat bizzat o sayfada Java'nın C ve C++'dan daha yavaş olduğunu söyleyen şu yazıyı görebilirsiniz.

1582977010266.png


Yukarıdaki kısımda basitçe Java'nın C ve C++ gibi dillerden daha yavaş olduğundan ve bunun nedeninin de Java'nın direkt olarak native kod olarak yürütülmeyip, JVM'de yürütülmesinden ve JVM'nin arka planda her zaman işlem yapmasından kaynaklı olduğundan bahsediyor. Aşağıda JIT ve Java 1.1'ın çıkışı ile performansın arttığından da bahsediyor fakat C/C++'yı geçtiğine dair hiç bir iddia bulunmamakta attığınız makalelerde. Dediğiniz "Java 8 multi-threading ile birlikte C ve C++'dan daha iyi" iddiası ile alakalı da makale de bir şey göremedim ben.

Ve şunu da unutmayın ki Java'da C++ ile yazılmıştır; sizin yaptığınız şey Java ile yazılan Skript'e, Java'dan daha performanslı demek gibi bir şey.

Son olarak tekrardan belirtmem gerekiyor ki burada dediğim gibi programcının performansından veya dil özelliklerden bahsetmiyoruz; kodun yürütme zamanındaki performansından bahsediyoruz.

Akamedik makaleleri, araştırmaları deneyleri geçtim; Google'da basit şekilde arama yapınca bile bu sonuca erişirsiniz.

1582977856437.png


Burada da kısaca Java'nın yazılımcılar arasında - kolay olduğu için - daha çok tercih edildiğini fakat kodun öncelikle interpret edilip (JVM tarafından işlenip) daha sonra yürütülmesi gerektiğinden C++'ya göre de C++ direk native kod olarak yürütüldüğünden daha yavaş olduğundan bahsediyor. Ek olarak dil özelliği olarak Java daha kolay/gelişmiş dedik fakat Java'da olmayan özelliklerin, özelleştirilebilirliğin olduğundan da bahsedelim; daha gelişmiş demekte yanlış olur Java'ya; sadece daha hazırcı, kolay diyebiliriz obje silme gibi işlemleri bize bırakmadığı için. Sondaki kısımda bundan bahsediyor; C++'da pointer desteği var iken Java'nın sadece "pass-by-value" olduğunu söylüyor.

Java vs C yazarsanız da benzer sonuçlara, makalelere, araştırmalara, deneylere, performans testlerine, karşılaştırmalara erişebilirsiniz.

Hatta sırf bunun için yazılmış bir Wikipedia makalesi'de vardır:

Burada da makaleyi biraz inceleyerek Java'nın performans açısından C/C++'ya göre daha geride olduğuna kanaat getirebilirsiniz.

"In C++ it is common to allocate objects of compound types as local stack-bound variables which are destroyed when they go out of scope. In Java compound types are always allocated on the heap and collected by the garbage collector"

Mesela burada da C++'da bir obje oluşturduğunuzda ihtiyacınız olmadığı zaman direkt olarak silebileceğinizden fakat Java'da bu konuda bir kontrolünüz olmadığından ve Java'nın ancak referansları izleyerek ihtiyaç olmadığını anladığında toplu olarak sildiğinden bahsediyor.

"C++ provides cross-platform access to many features typically available in platform-specific libraries. Direct access from Java to native operating system and hardware functions requires the use of the Java Native Interface."

Burada da benim yukarıda bahsettiğim C++'da direkt işletim sistemine spesifik kütüphanelere erişebileceğinizi fakat Java'da bu olayın JNI ile C++ köprüsü kurmadan mümkün olmadığını; ve direkt işletim sistemine spesifik kütüphaneler kullanmanın daha hızlı olduğundan bahsetmekte.

İsterseniz kendiniz de daha fazla araştırabilirsiniz, fakat ben burada bitiriyorum; çok fazla yazdığımı ve bir çok konuya değinip anlattığımı düşünüyorum.
 

ByHarst

Herşey Çok Yakın!

Discord:

Byharst

Katılım
25 Nisan 2017
Mesajlar
68
Elmaslar
34
Puanlar
13.320
Yaş
23
Yer
Tekirdağ/Çerkezköy
Minecraft
byharst
Facebook
ByHarst
Twitter
goktugakmann
Aradığım konu karşımda teşşekkürler :evet:
 
Durum
Mesaj gönderimine kapalı.
Neden altınlarını Discord sunucumuzda kazmıyorsun? TIKLA VE KATIL!
Yukarı