Police line crime scene 2498847226

sun.misc.Unsafe ve Jigsaw Projesi

1
tongucyumruk

Java dünyasını biraz takip eden herkesin dikkatini çekmiştir, son dönemde Java 9 ve Jigsaw projesinin getireceği modüler yapı ile birlikte sun.misc.Unsafe lafı gitgide daha çok duyulur oldu. Peki nedir bu sun.misc.Unsafe?

Mykhailo Kozik'in bu makalesinde detaylı bir şekilde açıkladığı üzere, sun.misc.Unsafe JVM'in bellek koruması ile ilgili garantilerini altüst etmenizi sağlayan bir Java sınıfı. sun.misc.Unsafe sayesinde doğrudan belleğe erişmeniz, dilediğiniz gibi allocation yapmanız, halihazırda bellekte bulunan bir objenin üzerine dilediğiniz gibi veri yazmanız ve daha bunun gibi JVM'in normalde yapmanıza izin vermediği pek çok şeyi yapmanız mümkün. Ve tabi klasik uyarımızı da yapmayı ihmal etmemeliyiz: Bu sınıfı asla, ama asla kullanmayın.

Peki son dönemde kendisi neden bu kadar gündeme geliyor? Çok basit: Çünkü Jigsaw projesi. Bilmeyenler için, Jigsaw projesi Java diline ve JVM'e modülarizasyon özellikleri eklemeyi hedefleyen bir proje. Bu sayede geçmişte yaşanan jar hell tarzı problemlere bir çözüm getirmeyi hedefliyor. Jigsaw nedir başlı başına ayrı bir yazının konusu olduğu için çok detayına girmek istemiyorum ama bizim konumuz için en çok önem arz eden özelliğinden kısaca bahsedeceğim: Kütüphanelerden API ihraç etme özelliği.

Bugünkü JVM mimarisinde, eğer bir .jar dosyası sizin classpath'iniz içerisindeyse o .jar dosyasının içindeki bütün public olarak işaretlenmiş sınıflar sizin uygulamanızın erişimine açıktır. Eğer bir geliştirici kendi paket hiyerarşisi sebebiyle bir sınıfı public olarak işaretlemek durumunda kalırsa bu sınıf artık o kütüphanenin açık API'inin bir parçası haline gelir ve geliştiricinin bununla ilgili yapabileceği hiçbir şey yoktur. Genelde geliştiriciler bu problemi sözkonusu kodu impl veya ınternal gibi paketlerin içine koyarak kullanıcılarına bakın bu paketin içeriği kafama göre değişebilir, kullanmayın mesajı vermek suretiyle çözmeye çalışırlar.

Jigsaw projesi ile gelecek en önemli yenilik işte bu. Bir .jar dosyası artık bir modül olarak tanımlanabilecek ve bu sayede bir sınıf public olarak işaretlenmiş olsa dahi eğer o modülden ihraç edilmiyorsa o modülün dışından kullanımı engellenebilecek.

İşte sun.misc.Unsafe tam olarak bu noktada devreye giriyor. Özünde JVM'in bir implementasyon detayı olan bu sınıf public olduğu için bugüne kadar JVM üzerinde çalışan tüm uygulamalar tarafından erişilebilir durumdaydı. Günümüzde Neo4J'den Mockito'ya pek çok Java kütüphanesi bir takım sihirli işlemler için bu sınıfı bolca kullanıyor. Java 9 ile birlikte Oracle sun.misc.Unsafe sınıfını ihraç etmeyi kesmeyi planlıyor ki bu da bu sınıfa ihtiyaç duyan pek çok uygulamanın çalışmayı bırakması anlamına geliyor.

Java ilk duyurulduğu günden bu yana geriye uyumluluğunu sürekli olarak korumasıyla ün yapmış bir platform (hatta bu uyumluluk takıntısı geçmişte bazı tartışmalı tasarım kararlarına da sebep olmuş durumda). Hal böyleyken Oracle'ın bir arka kapı bırakmadan bu uyumluluğu tamamen kırması çok olası gözükmüyor fakat eninde sonunda hedefin bu olduğu da ortada.

Son dönemde geliştirici camiası içinde en çok tartışılan konulardan biri Oracle'ın bu konuya nasıl bir çözüm getireceği. Siz bu konuda ne düşünüyorsunuz? Java dışındaki dillerde bu gibi problemlerin nasıl çözüldüğüne ilişkin örnekleriniz var mı? Herkesi yorumlara bekliyoruz.

Kapak resmi: Wikimedia Commons

Görüşler

0
muhuk

Scala yukarıda bahsedilen soruna güzel bir çözümü var. foo.bar.baz.FooBar sınıfı için, mesela, private[bar] diyerek erişimini foo.bar ve foo.bar.baz ile sınırlayabiliyorsunuz.

package foo.bar.baz

private[bar] class FooBar() {
  // ...
}

(private işaretleyebileceğiniz diğer yerlerde de geçerli)

Görüş belirtmek için giriş yapın...

İlgili Yazılar

Görüntü işlem kütüphanesi - CmuCamJ

anonim

Serbest yazilim projesi olan CmuCamJ, 1.02 sürümüne geldi. Projenin amacı, robota bağlı ufak fotoğraf makinasından;
1- Resim çekip mini bilgisayara yüklemek
2- Mini bilgisayarda görüntüyü işleme
3- İşlem sonucuna gore robot yönetme
üzerine yapıldı. Görüntü işleme safhası için geniş bir kütüphane oluşturduk. Bu kütüphane içindeki işlemleri kullanan robot, mesela oda içinde gezinirken sadece "zemin bölümü" izole edilerek, nereye gideceğini takip edebilir. Nitekim yazdığımız ilk uygulama bu yönde idi.
SourceForge projesi: sourceforge.net/projects/cmucamj
Görüntü işlem hakkında bir yazı (CmuCamJ örneği ile): www.bilgidata.com/article.jsp?file=a_maske_kullanmak.xml&category=robotlar

İki listenin Hikayesi: Java yerine Ruby

anonim

Her şey haftalık işlerinizin basit bir listesini yapıp bunu dünya ile paylaşabilmenizi sağlayan Ta-Da list'in bir kopyası olan Bla-Bla list'in Geert Bevin tarafından yazılması ve duyurulması ile başladı.

Java, Dropwizard, Elasticsearch ve Docker ile kendimize bir fazlamesai.net klonu yazalım: Bölüm 1

tongucyumruk

Günümüzde uygulama geliştirme dendiği zaman çoğumuzun aklına iki tip uygulamadan biri geliyor: Mobil uygulamalar veya Web uygulamaları. Bunu masaüstü uygulama piyasası öldü anlamında söylemiyorum tabi ki fakat eskisi kadar "hip" olmadığı da aşikar. Web uygulaması denince pek çok insanın aklına da tabi ki Ruby on Rails veya Django gibi dinamik dillerin geliştirme çerçeveleri geliyor....

¶napster 0.85 alpha

larweda

¶napster, (pinapster) aylarca bilgisayar dünyasının çalkalanmasına yol açan, Metallica'nın dava açmasıyla daha da ünlenmiş olan ünlü Napster istemcisinin Java sürümü. Browser üzerinden kullanılan kullanıcı arabirimi, klasik Windows Napster'ının kullanıcı arabirimine çok benziyor, ayrıca da klasik Napster'a göre birçok yararlı ekleme de yapılmış. Mesela dosyalara kalınan yerden devam etme (resuming) ve transfer sınırı koyma şansı getirilmiş.

Java Kongresi İzlenimleri

FZ

18 Haziran 2005 Cumartesi, sıcak bir İstanbul sabahı. Yatmadan önce son hatırladığım şey kan çanağı gözlerle Practical Common Lisp kitabından bir bölüm okuduğum idi ancak güneş çoktan doğmuştu ve bir FM edtörü olarak yakından takip etmem gereken bir Java etkinliği vardı. Apar topar kalk, banyo, hemencecik bir şeyler giyin ve dışarı fırla...

İstanbul Bilgi Üniversitesi Dolapdere tesisleri dolu dolu bir etkinliğe ev sahipliği yapmak için hazır görünüyordu. Tanıdığım en iyi Delphi programcısı olan dostumla buluşup açılış konuşmasıyla başlayacak etkinliği izlemek için BS-1 salonuna doğru yol aldım.