Tags: java

zoo

2012-11-16, #1

По наводке из презентации Extreme Performance with Java (сама презентация не очень интересная), посмотрел как реализована очистка native блоков памяти в DirectByteBuffer без использования финалайзеров. Если вкратце, то:

- DirectByteBuffer в конструкторе создает объект типа sun.misc.Cleaner, который наследован от PhantomReference, передавая ему себя и специальный объект типа Deallocator. Т.е. DirectByteBuffer хранит у себя фантомную ссылку на себя же, и когда garbage collector прибирает объект типа DirectByteBuffer, фантомная ссылка попадает в очередь для ReferenceHandler thread

- когда ReferenceHandler thread обрабатывает эту новую ссылку, пришедшую от garbage collector-а, для объектов типа Cleaner срабатывает fast path и вызывается метод clean, который и дергает инстантс класса Deallocator, освобождая native блоки памяти
red-eye frog

(no subject)

Штирлиц потянулся за конструктором BlockingQueue, но рука нащупала только воздух. Интерфейс - догадался Штирлиц...
  • Current Mood
    giggly giggly
  • Tags
zoo

(no subject)

Смотрю примеры AOP в Google Guice и не могу избавиться от ощущения, что из-за отсутствия поддержки на уровне языка, всё выглядит очень многословно и порой неуклюже... словом, как седло на корове. При этом сами DI и AOP - вещи очень полезны, не спорю.
zoo

(no subject)

Дочитал SCJP, узнал/вспомнил ещё одну вещь:

ограничение типа в генериках, чтобы он был либо заданным типом, либо его предком:
List  = ...


А больше и ничего... посмотрел я содержание книжек для SCJD который вроде как после SCJP, но как-то там скучно, из нового только сети. Думаю, что читать дальше - или что-то по SCEA, или просто спецификацию языка.

Update: сделал выбор в пользу второго издания Effective Java
zoo

(no subject)

Currently на 224й странице SCJP. Уже открыл для себя break с меткой, раньше не знал о нём. Или забыл. Выглядит вот так:

outer:
for(int i=0; i<100; i++) {
	for (int j=0; j<100; j++) {
		if (i+j==100) {
			break outer;
		}
	}				
}
zoo

(no subject)

В продолжение прошлой записи: сейчас на 102-й странице, узнал две интересные вещи.

Код вида
short s1=10, s2=12;
short sum = s1 + s2;

не компилируется

Код
double rem = 13.5 % 3.1;

запишет в rem значение 1.1


Что характерно, точно такое же поведение и у C#. Как тут не вспомнить абзацы про Java и C# из A Brief, Incomplete, and Mostly Wrong History of Programming Languages

Collapse )
red-eye frog

profiling Java

Эксперимент показал, что в NetBeans профайлер заводится и работает "из коробки", а в Eclipse 3.6 (Helios), несмотря на то что TPTP ставится из родного репозитария, завести его - ещё та проблема (в итоге так и не завелся - вроде бежит, шуршит - но ничего вообще не отображает).
red-eye frog

(no subject)

Неплохое лаконичное введение в Scala: Scala by Example, хотя местами после Erlang и Haskell довольно-таки скучно.

Теперь бы ещё добраться до практического применения в большем, чем hello world..