fenikso: (Default)
По наводке из презентации 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 блоки памяти
fenikso: (red-eye frog)
Штирлиц потянулся за конструктором BlockingQueue, но рука нащупала только воздух. Интерфейс - догадался Штирлиц...
fenikso: (Default)
Смотрю примеры AOP в Google Guice и не могу избавиться от ощущения, что из-за отсутствия поддержки на уровне языка, всё выглядит очень многословно и порой неуклюже... словом, как седло на корове. При этом сами DI и AOP - вещи очень полезны, не спорю.
fenikso: (Default)
Дочитал SCJP, узнал/вспомнил ещё одну вещь:

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


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

Update: сделал выбор в пользу второго издания Effective Java
fenikso: (Default)
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;
		}
	}				
}
fenikso: (Default)
В продолжение прошлой записи: сейчас на 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

почему не компилируется, написано под катом - не rocket science )
fenikso: (Default)
нашел относительно не-новое но забавное видео с JavaZone

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

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

Profile

fenikso: (Default)
Kyryl Bilokurov

May 2017

S M T W T F S
 123456
78910111213
141516 17181920
21222324252627
28293031   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 03:08 pm
Powered by Dreamwidth Studios