İçerikler :

/usr/bin/java: /lib/ld-linux.so.2: bad ELF in.. Binary Repository Manager Feature Matrix Bytecode CentOS İşletim Sisteminde JDK (Java Developme.. Classpath CLASSPATH Derleme Süreci Garbage Collector’ı Çöp Ettiler! HotSpot - Java HotSpot - Java HotSpot Virtual.. Java Classpath Ayarları Java Virtual Machine - JVM - Java VM - Java S.. Java VisualVM JDK (Java Development Kit) JDK ve NEtbeans Kurulumu JRE (Java Runtime Environment) jvisualvm, jmxsh, jstat (potpuri*) Uygulama Çalıştırılması Sırasında JVM'nin Dil.. Windows'da Java Ortamı Kurup Derleme ve Çalış.. Windows'da Java ve JDK Kurulumu ve Versiyonu .. Windows JDK 8 Kurulumu Yorumlama Süreci

Bu Sayfayı Paylaş:

Kavram

JDK (Java Development Kit)

Tanım: Java'da kod yazmak ve java programlarını çalıştırmak için gerekli araçları içeren geliştirme kiti.

Kavram

Java Virtual Machine - JVM - Java VM - Java Sanal Makinası - JSM

Tanım: Gerçek makinelerin üstüne kurulan ve Java bytecode'u (derlenmiş java kodu) çalıştıran sanal makine (virtual machine)

Kavram

JRE (Java Runtime Environment)

Tanım: Java'da yazılmış programları çalıştırmaya yarayan uygulama. Java'da yazılmış bir uygulamanın bir bilgisayarda çalışması için o bilgisayarda JRE yüklü olmalıdır.

Kavram

HotSpot - Java HotSpot - Java HotSpot Virtual Machine

Tanım: Java 1.3'ten sonra standart olan (daha önce JVM performansı artıran bir engine olarak tanımlanmaktadır) Java Virtual Machine spesifikasyonuna uygun geliştirilen Java Virtual Machine

Kavram

Bytecode

Tanım: Java kodlarının derlendiğinde çevrildiği ve JVM (Java Virtual Machine) tarafından çalıştırılabilen kod

Kavram

Classpath

Tanım: Java derleyicisi (JDK) ve çalıştırıcısının (JVM) gerekli olan sınıfları ve paketleri bulabilmesi için verilen path (işletim sisteminde dizin veya bir dosyanın konumu), zip veya jar dosyası bilgileri. Çalıştırma ve derlemede değerler "classpath" veya "cp" parametresiyle verilirler

Kavram

CLASSPATH

Tanım: Java kurulu ortamda tanımlanan, varsayılan olan classpath değerlerinin tanımlandığı sistem değişkeni. Bir uygulamayı çalıştırırken ve derlerken CLASSPATH değişkeninde tanımlı olan sınıf ve paketler java tarafından kullanılacaktır

Veri

Java Classpath Ayarları

Java derleme ve çalıştırma (veya başka bir araç) sırasında , kullanıcının yarattığı veya üçüncü parti üreticilerin ürettiği sınıfları bulabilmesi için classpath değerini kullanılır
Eğer uygulama içinde kullanılmaya çalışılan bir sınıf classpath'te tanımlı değilse hata oluşur
Classpath iki türlü set edilebilir :
  • Sistem değişkeni olan CLASSPATH set edilir
  • Kullanım sırasında (derleme , çalıştırma vb.. sırasında) -cp veya -classpath parametresi ile set edilebilir
Classpath'e aşağıdaki tipler eklenir :
  • Klasör : Bir klasör tanımlanırsa içindeki sınıflar ve paketler classpath'e eklenmiş olur
  • .Jar veya .Zip olarak : Sınıflar veya paketlerin sıkıştırıldığı dosyalar classpath'e eklenebilir
Classpath'e kullanılan özel işaretler aşağıdaki gibi kullanılır :
  • . : Bulununan klasörü belirtir. Herhangi bir classpath set edilmesse varsayılan olarak kabul edilir
  • * : Bir klasörün içi (C:\Test\* gibi) tanımlanırsa o klasör içindeki tüm .jar uzantılı dosyalar classpath'e eklenirler. (Bir klasörü eklemek alt klasörlerin eklendiği anlamına gelmez. Alt klasörler ayrı olarak verilmelidir)
Classpath' birden fazla tanım aralarına ";" ile eklenmektedir :
-cp D:\Test;C:\Test2\a.jar;C:\Test3\* 
veya
set CLASSPATH=D:\Test;C:\Test2\a.jar;C:\Test3\*

Veri

CentOS İşletim Sisteminde JDK (Java Development Kit) Kurulumu

CentOS'ta JDK kurmak için Oracle'ın JDK download sitesinden -rpm.bin ile biten rpm dosyasını indirmeniz gerekmektedir.
Oracle login olmayı gerektirdiği için wget'i kullanamazsınız
-rpm.bin uzantılı dosyayı indirdikten sonra kurulum için gerekli haklar verilir. (Örneğin dosyamız jdk-6u29-linux-x64-rpm.bin olsun)
chmod +x jdk-6u29-linux-x64-rpm.bin
rpm dosyası (paketi) aşağıdaki gibi kurulur :
./jdk-6u29-linux-x64-rpm.bin
Yukarıdaki ./ çalıştır komutu ile kurulum gerçekleştirilecektir
Doğrudan rpm uzantısından kurmak için
rpm -ivh jdk-6u29-linux-x64.rpm
komutunu kullanabilirsiniz. Eğer daha önce kurulu olan bir java varsa aşağıdaki gibi upgrade yapabilirsiniz:
rpm -Uvh jdk-6u29-linux-x64.rpm

Materyal

Derleme Süreci

Java'da derleme sürecinin nasıl olduğunu gösteren resim. http://www.godoro.com sitesi üzerinden gösterilmektedir

Materyal

Yorumlama Süreci

Java'da çalışma anında yorumlama sürecini gösteren resim. www.godoro.com üzerinden gösterilmektedir

İpucu

Uygulama Çalıştırılması Sırasında JVM'nin Dil ve Bölgesel Ayarının Değiştirilmesi

Uygulama çalıştırılması sırasında JVM'nin dil ve bölgesel ayarı -Duser.language, -Duser.region seçenekleri (option) kullanılarak değiştirilebilir :
-Duser.language=en -Duser.region=US


Yukarıda sistemin dili İngilizce ve bölge ABD olarak ayarlanmıştır.

Eğer bölgelerde alt bölge varsa -Duser.variant'da kullanılabilir.

İpucu

Windows'da Java Ortamı Kurup Derleme ve Çalıştırma

Windows'da java ortamı kurup derleme ve çalıştırma işlemi aşağıdaki adımları kullanarak yapabilirsiniz :
Adım 1 : SDK Kurucu'yu İndirin
SDK'yı download etmek için
www.oracle.com/technetwork/java/javase/downloads/index.html
adresine gidin. 'Windows (all languages)' ve 'SDK' bölgesinde download seçeneğini tıklayın. Çıkan anlaşmaya 'Accept' deyin. Daha sonraki sayfada çıkan asıl download linkini tıklayın ve dosyayı
c:\jdownload
klasörüne (yoksa yaratıp) kaydedin.
Adım 2 : SDK'yı Kurun
Kurucu programı ('c:\jdownload\.exe') çalıştırın ve klasör olarak
c:\jsdk
(yoksa yaratıp) verin.
Adım 3 : Bir Çalışma Dizini Yaratın
Diskte
c:\jwork
adıyla bir dizin yaratın.
Adım 4 : Basit Bir Uygulama Yazın
Çalışma dizinine 'c:\jwork\MyClass.java' şeklinde bir dosya yaratın ve içine şunları aynen yazın
public class MyClass{
	public static void main(String[] args){
		System.out.println("OK!");
	}
}
Adım 5 : Source Kodu Derleyin
c:\jsdk\bin\javac MyClass.java 
Adım 6 : Programı Çalıştırın
c:\jsdk\java -cp c:\jwork MyClass

Eğer ekranın son satırında "OK!" görüyorsanız sistemize Java başarıyla kurulmuş demektir. Yazdığınız class'ları aynı şekilde derleyebilirsiniz.

İpucu

/usr/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory Hatası

Linux'da java -version komutu verildiğinde aşağıdaki gibi bir hata verebilir :
-bash: /usr/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

bu 64 bit ortama 32 bit JDK kurulmaya çalışıldığı veya kurulduğu anlamına gelmektedir.

Alıntı

Garbage Collector’ı Çöp Ettiler!

Garbage Collector ve core-dump
Sahipleri : Yusuf Boyacıgil
Bu yazı izinle alıntılanmıştır : http://yboyacigil.com/turkish/java/jvm-gc/
Oracle aldıktan sonra Java’nın geleceği ile alakalı kaygılarım vardı. Kendi kendime: “Bu paragöz şirket Java’yı aldıktan, James (Gosling) baba’yı da şutladıktan sonra Java’yı bozar” demiştim. Çok geçmeden GC’den ötürü durup dururken “core-dump”lar atmaya başlayınca endişemde haklı olduğum kanısına vardım.
Hikayemiz şöyle gelişti. Bizim bir uygulamamız var. Bunu integrasyon testlerini yapmak için birkaç makineye kurduk. Daha testlere başlamadan “Houston! Bir sorun var!” diye mesajlar almaya başladık. Baktık tabi duruma: Üzerinde yük yok, makine sağlam bir makine, jvm’in en son versiyonu (bi sürü “bug fix” yapılmış olanı), native lib’ler falan hepsi tastamam, ama uygulamanın biri bir-iki saat çalışıp “core” atıyor. Cluster’dan mı lan yoksa diye işkilleniyoruz. JVM aklımıza bile gelmiyor.
Hemen core dump’ları başladık incelemeye. “GCThread”, “GCConcThread” yani ismiyle müsemma Garbage Collector thread’leri yamulmuş. O kadar zamandır Java ile uğraşıyorum. GC ile JVM’in core attığını nadir görmüşümdür. Daha önce de yine başka bir uygulamada GC ile ilgili core’ları yemiştik. jvm versiyonunu yükselttik, GC tuning yaptık, sonra jvm versiyonunu alçalttık falan sorunu bir şekilde çözmüştük.
Tabi, hemen sorun ile ilgili bir google danışmak gerekti. Google da bizi jvm bug veritabanına yönlendirdi. Bizim gibi başkaları da çeşitli jvm versiyonlarında benzer sorunları yaşamışlar. Her bug için farlkı work around’lar var. E haliyle, niyet ettik niyet eyledik work around’ları uygulamaya. Yalnız şöyle bir durum oldu ki bir work around’u uygulayınca bir süre sonra yine core attı. Onu aratıyorsun başka bir çözüm, o çözümü uyguluyorsun yine patlıyor! Böyle günlerce uğraştık.
Her seferinde yeni bir work around, biraz GC tuning, GC’yi gözleme (jvisual vm + gc viewer plugin) yapıp ne oluyor, nasıl oluyor anlamaya çalıştık. Sonunda sorun çözüldü artık core atmıyor. Ama neden atmıyor, ben bilmiyorum henüz. Ya bam telinden yakaladık da uygun GC parametrelerini tutturduk (ki bu olduğuna inanmıyorum) ya da kendiliğinden sorun halloldu veya sizi çok uğraştırdım siz biraz takılın sonra yine başınızı ağrıtırım dedi ve bir gün geri gelecek.
Birkaç örnek vereyim nelerle uğraştık:
Multiple JVM crashes seen with 1.6.0_10 through early access of 1.6.0_14 – possibly related to GC
“core dump”‘lardan biri buraya kadar getirmişti. Çözüm önerisi:
-XX:-ReduceFieldZeroing -XX:-ReduceInitialCardMarks -XX:-ReduceBulkZeroing
parametrelerini kullanın idi. Kullandık yine patladı.

CMS: reference processing crash if ParallelCMSThreads & ParallelGCThreads

Hakkaten bizde de CMS thread sayısı, gc thread’lerden çoktu. Çözüm önerisi:
always use ParallelCMSThreads &= ParallelGCThreads (if modifying them via the command line).
Çözümü uyguladık ama yine patladı.
Netice itibariyle bugünkü yorumum şudur ki: “GC artık çöp olmuştur!”
Hadi diyelim benim durumum bana özel. Her koyun kendi bacağından asılır. Ya da ne biliyim benim derdim elalemi niye gersin. O zaman şuna ne diyeceksiniz: GC Tuning denen bir uzmanlık alanı veya sanat çıktı. Yani memory’yi temizleme işi araç olmaktan çıktı amaç haline geldi! Burada bir enayilik var. Onlarca collector, yüzlerce GC parametresi var. Bu parametreler ile ilgili dokümantasyon eksiği var. Biri ötekini eziyor, diğeri berikiyle yapmak istediğin şeyi etkisiz hale getiriyor, vs. Bu kadar collector ve parametre fazla. Böyle olmaması gerekir. İşin bir diğer ram’ler ucuzladı. Ama jvm heap’inin 4-6 gb üzerinde vermeye başlayınca uzun süren “durdurun dünyayı inecek var!” durumları yaşanıyor ve bu süre bizim işler için kabul edilebilir değil!
Mesela “young gen.”‘i paralel olarak temizlemek için GC’nin harcadığı zaman genellikle kabul edilir oluyor. Buna güvenip diyelim boyutunu artırınca bu sefer young’ın temizlenmesinin uzadığını görüyorsunuz. Uygulamanın yarattığı objeler genellik orta ömürlü ise, young’ın boyunu makul bir seviyede artırıp, survivor space’lerin büyüklüğünü ayarlayıp, tenuring threshold’u max değerine getirip, old’a az ideal de hiç obje atmak için bir tuning yapsanız bile old’a atılmasına ve hatta gc’nin paralel’den seriye düşmesine kesinlikle engel olamıyorsunuz.
CMS “durdurun dünyayı” sendromunun en az olması için şu anda en çok kullanılan toplayıcı. Ama o da compaction yapmadığı yani ölü nesneleri işaretleyip geçtiği, old gen alanında boş alanları bir araya getirmediği için fragmantasyon çok oluyor ve bu mem alloc. performansını etkiliyor. Bunun gibi birçok dikkat edilmesi gereken ve bilinmesi gereken şey var GC ile ilgili.
Netice itibariyle olması gereken şudur:
java -Xmx30g <main-class>
gibi.
Yani uygulamamı max. 30 gb heap ile çalıştır. GC’nin detaylarıyla beni uğraştırma! Madem otomatik mem management yapıyorum diyorsun benden yüz tane hint isteme. Hadi bakiym!

Alıntı

jvisualvm, jmxsh, jstat (potpuri*)

Java Monitoring ile ilgili bazı araçlar
Sahipleri : Yusuf Boyacıgil
Bu yazı izinle alıntılanmıştır : http://yboyacigil.com/turkish/java/jvisualvm-jmxsh-jstat/
potpuri, potbori veya potburi: bileşim, harman, karışım. İngilizcesi potpourri
Bu yazıda bi potpuri patlatacağım. Her ne kadar kendisinin anlamlarından biri: Birbirinden epey farklı şeylerden oluşan karışım da olsa, başlıkta geçen şeylerin hepsi “Java Monitoring” ile alakası olması bakımından aynı şeyle ilgili. Konu aslında DEVEloper’lardan ziyade SUPport’çuları ilgilendiriyor olsa da bir javacının bunları bilmesi iyi bir şeydir netekim.

jvisualvm


jvisualvm ile “local” veya “remote” jvm’e bağlanmak için illaki -Dcom.sun.management.jmxremote* system property’lerini uygulamayı başlatan java komutuna geçmek gerekir mi gerekirse hangi durumlarda gerekir buna dair: Visual VM Java 6 (jdk 1.6.x) üzerinde çalışan bir uygulamanın JMX Agent’ını otomatik olarak bulur. (Visual VM çalışan java uygulamalarını jps tool’u ile bulur. jps $JAVA_HOME/bin altında) Daha eski Java versiyonları için yukarıda bahsi geçen system property’lerini girmek gerekir. Ama otomatik bulmanın da istisnaları var:
Eğer uygulamayı çalıştıran kullanıcı ile jvisualvm’i çalıştıran kullanıcılar farklı ise,
Eğer uygulama uzaktaki makinede çalışıyorsa, jstatd çalışmıyorsa veya çalışsa bile uygulama ile farklı bir kullanıcı ile başlatılmışsa,
yine bahsi geçen system property’leri gereklidir.

jmxsh


jmxsh Apache 2.0 lisansı ile dağıtılan, code google’da open source, JMX agent’a komut satırından bağlanmak için bir arabirim. JConsole, JVisualVM gibi grafik ortam gerektirmediği için uzaktaki makineye bağlanıp hemen kullanılabilecek bir araç. Ayrıca script desteği de var. Bu ne demek diyenler için: Bir (tcl) script yazarak, mesela herhangi managed bean’in attribute’ları okunabilir/değiştirilebilir veya operasyonları çalıştırılabilir. Operasyonel açıdan mesela belli attribute’lar kontrol edilerek çalışan java uygulamasını sanity kontrolünü yapmak için bir script belirli aralıkla çalıştırılabilir, vs.

jstat


Java SDK ile gelen tool’lardan biridir kendisi prstat gibi, çalışan jvm ile ilgili bir kısım istatistiki bilgileri belli aralıklarla almak için kullanılır. Kullanımı çok zariftir. Hatta basitçe şöyledir:
jstat -<option> <vmid> [<interval>][<count>]

option şunlardan biridir:
-class
-compiler
-gc
-gccapacity
-gccause
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-printcompilation

vmid process id yani pid’dir.
interval N sn veya mili sn mesela 1s ve 100ms gibi.
count da haliyle 0′dan büyük bir sayıdır.
Nasıl mı? Şöyle:
> jstat -gccause 16642 1s
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
42.78 0.00 50.07 15.08 30.53 44 4.605 0 0.000 4.605 unknown GCCause No GC
42.78 0.00 50.07 15.08 30.53 44 4.605 0 0.000 4.605 unknown GCCause No GC
42.78 0.00 50.07 15.08 30.53 44 4.605 0 0.000 4.605 unknown GCCause No GC

adı üstünde GC varsa nedeni ile birlikte basan bir komut. Survivor, Eden, Old space’lerin doluluk oranlarını, Young ve Old generation GC sayı ve zamanını basıyor. (pid: 16642 interval: 1s)
> jstat -gcnew 16642 1s
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
3840.0 3968.0 0.0 2048.0 1 15 3840.0 118912.0 3643.6 61 46.500
3840.0 3968.0 0.0 2048.0 1 15 3840.0 118912.0 3643.6 61 46.500
3840.0 3968.0 0.0 2048.0 1 15 3840.0 118912.0 3643.6 61 46.500

Young generation Survivor space’lerinin ve Eden space’in kapasitesi ve ne kadarının kullanıldığı, Young generation GC sayı ve zamanını ve tenuring threshold, max tenuring threshold değerlerini basıyor. (pid: 16642 interval: 1s)
Opsiyonların cümlesini burada yazmanın bir alemi yok. Zaten çoğu opsiyonun isminden anlaşılıyor. Bunları evde kendi başınıza deneyebilirsiniz.
Potborimi burada bitirirken, illaki bir sonuç olması gerekmemeli diye bitirmek istiyorum ama gördüğünüz gibi olmuyor. Neden küçülükten beyni türkçe/edebiyat hocaları yıkadığı için. Efenim neymiş muhakkak bir giriş, gelişme ve sonuç olmalıymış. O bakımdan alın size sonuç bu işte!

Kaynak

Binary Repository Manager Feature Matrix

Repository araçlarını karşılaştıran bir web sitesi

Materyal

JDK ve NEtbeans Kurulumu

Bu videoda JDK ve Netbeans kurulumu anlatılmaktadır
bu video 4 DVD'lik Java Göstermeli Öğretim Kümesi görüntülü eğitim setindeki videoların demosudur

Kavram

Java VisualVM

Tanım: JVM üzerinde çalışan Java uygulamaları ile ilgili bilgi alınmasını ve izlenmesini sağlayan bir grafik arayüzü aracı

İpucu

Windows'da Java ve JDK Kurulumu ve Versiyonu Hakkında Bilgi Elde Etmek

Windows'da JDK kurulumu varsa ve versiyonu nedir öğrenmek istediğinizde komut satırından


java -version



komutu girilir.



Eğer


D:\Users\zteker>java -version
'java' is not recognized as an internal or external command,
operable program or batch file.



şeklinde bir cevap alıyorsanız JDK kurulu değil demektir. Ancak emin olmak için C:\Program Files veya C:\Program Files (x86) altında Java klasörüne bakabilirsiniz. Bu klasörlerde jre dizini varsa sadece runtime vardır ve JDK yoktur.



Eğer JDK var ise şuna benzer bir şey görülmelidir :


java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) Client VM (build 25.31-b07, mixed mode, sharing)



Başlat (Start) menüsünden About Java'ya tıklarsanız :





çalışma ortamın versiyonunu öğrenebilirsiniz :





Görüldüğü gibi runtime ortamının 7 olduğu görülüyor.

İpucu

Windows JDK 8 Kurulumu




Öncelikle kurulum dosyasını indirmeniz gerekir. Bunun için www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html kullanılabilir. Windows için ilgili (64 bit windows için jdk-8u251-windows-x64.exe) dosyası indirilir.



Oracle hesabınız yok ise yaratmanız gerekir var ise login olmanız gerekiyor. Ardından exe dosyası indirilmeye başlanır. Kurulum da next next diyerek kolay bir şekilde gerçekleşmektedir.





Kurulum tamamlanınca doğrumamak için komut satırından java -version komutu yazılır.


D:\Users\zteker>java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)




bu şekilde bilgi geldiğinde kurulum tamamlanmıştır.



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir