hız farkının olmasının sebebi sanırım string "sabit string havuzu " olarak adlandırılan bir yerde tutulurken, stringbuffer'ın direkt yığında tutuluyor olması, ama baktığım yerdeki string testi stringbuffer'a oranla daha hızlı çıkmış, bir de stringBuilder diye bir şey varmış hocam. http://www.thejavageek.com/2013/06/19/the-string-constant-pool/ http://javahungry.blogspot.com/2013/06/difference-between-string-stringbuilder.html mugen tarafından 06/Eyl/15 01:37 tarihinde düzenlenmiştir O mahiler ki derya içredir deryayı bilmezler.. .

Hocam string normalde append tarzı işlem için uygun birşey değil. Sen ekleme yaptığında nce bi stringbuffer objesi oluşturuyor orda eklemeyi yapıyor. Daha sonra yeni stringi dndürüyor. Aslında zaten biri diğerini içinde kullanıyor yani :) İngilizcen iyi ise burda daha ayrıntılı byte code üzerinden anlatımı var. http://www.javaworld.com/article/2076072/build-ci-sdlc/stringbuffer-versus-string.html Ayrıca tahminim, stringbuffer olması gereken yerden fazla allocation yapıp kopyalamayı içerisine direkt yapıyor olabilir. C++ vektr yapısı benzer bir şekilde çalışıyor. Her yeni eleman eklendiğinde birer birer allocation yapmak yerine performans için toplu olarak yapılıyor allocation işlemleri. There are 10 types of people in the world. Those who knows binary and those who dont...

Merhaba Beyler, Geçen kitap okurken anlatılıyordu. test edince grdüm ki StringBuffer String'e her türlü basıyor. Anlamadığım ikiside nesne olarak oluşturuluyor. fakat biri diğerine uçurum fark açıyor. çalışma yapısından kaynaklı deyip geçmeyin. biraz işin iç yüzünü anlatın bilen arkadaşlar. //kod başı package reklamyok. StringBufferTest; public class StringBufferTest { public short BUFFLEN = 16; public int ITERATOR = 10000; static StringBufferTest st = new StringBufferTest ; public void stringSinifi { System. out. println ; String str = new String("0"); long start = System. currentTimeMillis ; for(int i=0;i<ITERATOR;i++) long end = System. currentTimeMillis ; System. out. println ; System. out. println("Time : "+ ; } public void stringbufferSinifi { System. out. println ; StringBuffer str = new StringBuffer ; long start = System. currentTimeMillis ; for(int i=0;i<ITERATOR;i++) long end = System. currentTimeMillis ; System. out. println ; System. out. println("Time : "+ ; } public static void main } //kod sonu ÇIKTI : String Sınıfı YazarLength : 16Time : 113StringBuffer Sınıfı YazarLength : 16Time : 4 Ne zaman birşey ğrenmek istesem, Birden Vaktim Kalmıyor?

String e append yaptığın her sefer için yeni bir String objesi oluşur, eskisiyle beraber yeni değer de beraberinde kopyalanır. 1000 tane append yaparsan, 999 tane String nesnesi garbage'a düşmek için memory'ni çplüğe çevirir. Yani String immutable bir nesne türüdür. Ama stringbuffer adı üzerinde belli bir bufferdan oluştur. Append yapmak için nesneyi yeni nesneye kopyalamazsın. Nesne adedi 1dir. Yani mutable nesne türü. Ama kalkıp o zaman string'i kimse kullanmasın, herkes stringbuffer kullansın deme sakın. Her tatlı yemenin acı osuruğu olur. Stringbuffer memoryde daha çok yer işgal eder. O yüzden heryere stringbuffer kullanayım gibi bir düşünceye girme. Gerekli şeyi gerekli yerde kullanmalısın. Ayrıca stringbuffer thread-safe ve syncronised metodlardan oluşur, yani multi-thread uygulamalarda güvenle kullanabilirsin ama tabi buda lock mekanizması içerdiği için tekrardan performanstan dün verecektir. Hadi az daha kafanı bulandırayım, Stringbuilder diye de bişi var buda stringbuffer'ın 1e1 kopyası ama thread-safe olmayan versiyonu. Threadlerle işim olmayacak dersen alternatifin olabilir. Edit: Toparlamak için performans sırası vereyim; String > StringBuilder > StringBuffer S2kucuk tarafından 06/Eyl/15 01:43 tarihinde düzenlenmiştir

buradaki eleman açıklamış hocam http://javahungry.blogspot.com/2013/06/difference-between-string-stringbuilder.html ancak senin sonuçta terslik var, bakmak lazım. çünkü stringbuilder de bakıldığında yazıya gre synchronized olarak işaretlenmiş.. şimdi bir metod ya da değişken synchronized/atomic olarak işaretleniyorsa, bu o değişkenin her an değişebileceğini bildiriyor demektir, o yüzden performansı düşürmesi gerekiyor. Bir başka etken de thread safe olayı var. Burda da temel olarak lock ya da türevleri kullanılmıştır. Bu da aynı anda iki threadin erişememesi anlamına geliyordur, ayrıca RC oluşmuyor.. Bunlar aslında çok nemli konular.. Ben java da uzman olmadığım için o kadar çok derine inmedim ama bunlar hakkında bilgim var, java da asenkron programlama dersi almıştım ve hoca da gayet iyiydi, ingilizcen yeterliyse kitabı paylaşabilirim.. güzel konular, zellikle çeşitli türlerdeki locklar (cas , reentrantlock, ccas , sync-atomic, volatile olayları, can, race condition v. s. v. s. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.