четверг, 31 декабря 2009 г.

Facebook использует Erlang

Erlang at Facebook – интересная PDF-а на 40 страниц.

Erlang использовался для реализации части сервиса Chat в Facebook. Прототип сервиса был создан в январе 2007, затем командой из 4 человек доводился до ума до осени 2007-го. В феврале 2008 проект был запущен в тестовую эксплуатацию.

P.S. Взято тут.

вторник, 29 декабря 2009 г.

Oracle Coherence: Implement Transactions, Locks, and Concurrency

Implement Transactions, Locks, and Concurrency:

"Coherence provides several options for managing concurrent access to data.
- Explicit locking (The ConcurrentMap interface (part of the NamedCache interface) supports explicit locking operations. Many developers find this simple locking API to be the most natural approach.)
- Transactions (The TransactionMap API builds on top of the explicit locking operations to support ACID-style transactions. )
- Container Integration (For transaction management in a Java EE container, Coherence provides a JCA resource adaptor in order to allow transactions to be managed via JTA. Although Coherence does not support XA transactions at this time, it can participate in XA transactions as the last resource.)
- EntryProcessors (Coherence also supports a lock-free programming model through the EntryProcessor API. For many transaction types, this minimizes contention and latency and improves system throughput, without compromising the fault-tolerance of data operations.)
- Data Source Integration(Guidelines on maintaining caches with local (non XA) data resources.)"

On Optimistic Methods for Concurrency Control

H.T. KUNG and JOHN T. ROBINSON, On Optimistic Methods for Concurrency Control, ACM Transactions on Database Systems, Vol. 6, No. 2, June 1981.

Найдено тут = com.tangosol.util.TransactionMap. Видимо классика.

Who's Who in Distributed Caching Platforms: IBM, Microsoft and Oracle

Who's Who in Distributed Caching Platforms: IBM, Microsoft and Oracle

понедельник, 28 декабря 2009 г.

In-Memory Data Grid: Oracle Coherence

Прочитал Oracle® Coherence Getting Started Guide.

"The Oracle Coherence In-Memory Data Grid is a data management system for application objects that are shared across multiple servers, require low response time, very high throughput, predictable scalability, continuous availability and information reliability. For clarity, each of these terms and claims is explained ..."

суббота, 26 декабря 2009 г.

"Big three" classic transaction managers

From here:

"IMS is also a robust transaction manager (IMS TM, also known as IMS DC) — one of the "big three" classic transaction managers along with CICS and BEA (now Oracle) Tuxedo."

пятница, 25 декабря 2009 г.

Bio: Neal Gafter

Вот био так био:
"Neal Gafter works on .NET languages at Microsoft. He used to be a software engineer and Java evangelist at Google. Previously, at Sun Microsystems, he designed and implemented the Java language features in releases 1.4 through 5.0. and led the development of C and C++ compilers at Sun Microsystems, Microtec Research, and Texas Instruments. He holds a Ph.D. in CS from the University of Rochester."

XQuery, XPath, XSLT and multicore

from here:

"InfoQ: What advantages do languages like XSLT 2 and XQuery 1 have over using a Java DOM model for working with XML in multi-core or Cloud environments?
...
First declarative programming asks the user what they want to do. This is as opposed to imperative programming (ex: Java code working with the DOM or JAXB APIs) which asks the user how they want to do what they want to do. Declarative programming leads to smaller, easier to maintain code that adapts faster to change. It also allows a user to express to the XML runtime what they are interested in or how they want to query or transform data in a way that allows the runtime to optimize in ways not possible when the user tells the runtime exactly how to execute. This difference is very important in multi-core and Cloud as you can imagine optimizations that not only recognize patterns that can be better executed differently on a single CPU, but also executed better on multiple CPUs or across virtual environments. Also, as XSLT and XQuery are functional and side-effect free, you can execute such optimizations with complete safety – something that isn't possible in imperative languages using typical programming APIs. Also, I personally believe, long term, higher level declarative languages will have a better fit with the cloud as they will be more portable than lower level languages that assume a specific runtime."

воскресенье, 20 декабря 2009 г.

Unfair lock can produce VERY ASYMMETRICAL results

Ceki Gülcü (author of Log4j) пишет в своем блоге про крайне неравномерные (максимально неравномерные) результаты при использовании synchronized:
"
runnable[0]: counter=1002
runnable[1]: counter=0
runnable[2]: counter=0
runnable[3]: counter=0
runnable[4]: counter=0
"
При том, что ожидалось "примерно по 200".

Это к тому, что
1) симметричные уравнения и симметричные граничные условия могут давать асимметричные решения;
2) unfair примитивы синхронизации МОГУТ, но НЕ ОБЯЗАНЫ обеспечивать "статистическую честность".

P.S. Кстати, всегда интересовало что говорят заказчику, если в проекте используются unfair примитивы синхронизации, которые могут привести к такому поведению (фактически livelock для некоторых потоков), но во всех тестах ведут себя "хорошо". Что будет если в какой-то момент времени заказчик потеряет деньги из-за таких вот особенностей поведения ПО? Т.е. считать ли проект "выполненным/готовым"?

Приостановка семинаров

Господа и дамы, в связи с началом сессий в харьковских ВУЗах предлагаю приостановить семинары на некоторое время (3-4 недели).

P.S. Отпишитесь, пожалуйста, в камментах у кого и когда начинается весенний семестр.

четверг, 17 декабря 2009 г.

Как finalize() может быть причиной OutOfMemoryError

ImageInputStreamImpl still uses a finalize() which causes java.lang.OutOfMemoryError.

Это к тому, что объекты классов с переопределенным finalize() убираются заметно "медленнее" коллектором.

Весенний семестр

Господа, предварительные планы на весенний семестр включают материалы по:
1) Transactional Memory (на примере dstm2);
2) Actor-based concurrency model (на примере Scala).
---
Для TM и Actor будем рассматривать те реализации, которые привязаны к Java/JVM. Что бы полученный опыт легко можно было использовать при разработке j2ee-приложений.

P.S. Это к тому, что сейчас этих материалов прибавится на блоге :)

Отмена семинара

Господа и Дамы, в связи с тем, что я приболел, семинар в Чт(17 дек) отменяется.

среда, 16 декабря 2009 г.

Sun Tech Reperts for 1992-2009

Sun Tech Reperts for 1992-2009.

Java SE HotSpot Publications

Java SE HotSpot Publications. HotSpot related technology has been featured in the literature, at conferences and in articles. Below is a listing of some of these references:

* Oct 2006. Ken Russell and Dave Detlefs, Eliminating Synchronization-Related Atomic Operation with Biased Locking and Bulk Rebiasing. Paper from OOPSLA 2006. Slides.

* Sep 2006. Christian Wimmer and Hanspeter Mossenbock. Automatic Object Colocation Based on Read Barriers. Paper from Joint Modular Languages Conference 2006.

* May 2006. Steve Goldman, Dave Detlefs, Steve Dever and Ken Russell, New Compiler Optimizations in the Java HotSpot Virtual Machine. Talk from JavaOne 2006.

The Sun Labs JavaTM Technology Research Group

В составе SUN обнаружена The Sun Labs JavaTM Technology Research Group.

MISSION

The Sun Labs JavaTM Technology Research Group (formerly Java Topics) is working on advanced technologies that may be useful for the Java platform nine months and beyond. We are currently focused on high performance implementations of the Java virtual machine.

Parallel Garbage Collection for Shared Memory Multiprocessors

Parallel Garbage Collection for Shared Memory Multiprocessors from Christine H. Flood and David Detlefs, Sun Microsystems Laboratories; Nir Shavit, Tel-Aviv University; and Xiolan Zhang, Harvard University. Описывает реальные эксперименты с GC с Java, но я пока не выяснил эти ли продукты в JDK.

Abstract
We present a multiprocessor "stop-the-world" garbage collection framework that provides multiple forms of load balancing. Our parallel collectors use this framework to balance the work of root scanning, using static overpartitioning, and also to balance the work of tracing the object graph, using a form of dynamic load balancing called work stealing. We describe two collectors written using this framework: pSemispaces, a parallel semispace collector, and pMarkcompact, a parallel markcompact collector.

Presenting the Permanent Generation

Presenting the Permanent Generation from Jon Masamitsu's Weblog.

понедельник, 14 декабря 2009 г.

How Hotspot Decides to Clear SoftReferences

How Hotspot Decides to Clear SoftReferences - some info from Jeremy Manson about SoftReference clearing algorithm.

Some interesting info for HotSpot 6 = "SoftReferences will always be kept for at least one GC after their last access".

Intel: Technical Books for Multi-Core Software Developers

Technical Books for Multi-Core Software Developers = 13 (and yet some in comments) books from Intel point of view.

пятница, 11 декабря 2009 г.

[Personality]: Jon Masamitsu (GC)

Блог Jon Masamitsu содержит просто огромное количество информации по GC в HotSpot.

Например тут он рассказывает про допустимые комбинации коллекторов в Young и Old поколениях:
"
- UseSerialGC is "Serial" + "Serial Old"
- UseParNewGC is "ParNew" + "Serial Old"
- UseConcMarkSweepGC is "ParNew" + "CMS" + "Serial Old". "CMS" is used most of the time to collect the tenured generation. "Serial Old" is used when a concurrent mode failure occurs.
- UseParallelGC is "Parallel Scavenge" + "Serial Old"
- UseParallelOldGC is "Parallel Scavenge" + "Parallel Old""

Jon Masamitsu about TLAB

TLAB == Thread Local Allocation Buffers.
В блоге Jon Masamitsu рассказано как HotSpot 5/6 работает с TLAB.
Также как ими можно управлять/мониторить:
-XX:UseTLAB
-XX:TLABSize
-XX:ResizeTLAB
-XX:MinTLABSize
-XX:+PrintTLAB

Опции GC

Тут документ, где собрано вместе несколько десятков опций GC.

NUMA, Solaris and memory allocation

Help for the NUMA Weary - Solaris старается выделять память "поближе" к процессору.

четверг, 10 декабря 2009 г.

Implementing Fast Java Monitors with Relaxed-Locks

Dave Dice article "Implementing Fast Java Monitors with Relaxed-Locks".
Как я понимаю, именно так были реализованы мониторы в Sun JVM 1.2.

понедельник, 7 декабря 2009 г.

Biased Locking

Техника, называемая Biased Locking была добавлена в Java 6 и состоит в том, что для несовревновательных повторных вызовов synchronized{} обходится очень дешево. Кажется, вот это - "Eliminating Synchronization-Related Atomic Operations with Biased Locking and Bulk Rebiasing" ключевая статья.

P.S. Взято отсюда - "Java SE 6 Performance White Paper".

P.P.S. Во многом благодаря biased locking (при использовании монитора только одним потоком не используется мьютекс операционной системы, а !максимум! одна атомарная инструкция) synchronized в яве может работать быстрее мьютекса операционной системы - "...the synchronization primitives in modern JVMs provide latency and throughput performance that is typically better than that of the native pthreads_mutex constructs..."

пятница, 4 декабря 2009 г.

Java EE 6 Virtual Conference

Attend the Virtual Conference on December 15, 2009 and get an exclusive look into the Java Platform, Enterprise Edition 6 (Java EE 6) and Sun GlassFish Enterprise Server v3, the first Java EE 6 platform compatible application server.

Date:
Thursday, December 15, 2009
Time:
Time: 8am - 5pm PST - 15 unique sessions (attend 1 or more, as you wish!)

четверг, 3 декабря 2009 г.

Собеседование по Java Concurrency

Это перепост моего поста с rsdn.ru.
-------------------------------------
В последнее время во многих вакансиях на Java Developer появилось требование знания Java Concurrency/Multithreading. В ответ многие разработчики тут же добавили такую строчку себе в резюме. Я как человек, который проводит собеседования, хотел бы развеять некоторые недоразумения относительно этого термина.
Все проекты связанные с многопоточностью я бы разделил на 3 класса: использующие многопоточность, основанные на многопоточности и те, которые и есть сама многопоточность. К первому классу("использующие") я бы отнес проекты, которые предполагают работу в многопоточной среде. Пример: есть класс BlaBlaBlaFactory, в документации необходимо указать, может ли эта фабрика использоваться одновременно несколькими потоками или нет. Если нет, то сделать ее потокобезопасной с помощью ReentrantLock. Ко второму классу ("основанные на") я бы отнес проекты, в которых использование нескольких потоков является одним из ключевых моментов. Пример: многопоточный кодек видео формата H.264. К третьему классу ("являются ей") я бы отнес проекты, в корне что-то меняющие в отношении потоков. Пример: написание runtime-среды для языка Scala (на Java) с реализацией легковесных потоков и своеобразной моделью памяти.

среда, 2 декабря 2009 г.

Java Platform Security

Безопастность в Java состоит из двух частей:
1) Java Platform Security - то что называется sandbox, обеспечение на уровне JVM;
2) множенство API для криптографии, SSL, HTTPS, Kerberos, etc.

Для ознакомления с 1)Java Platform Security рекомендуется прочитать главы 7 и 8 из "Enterprise Java 2 Security: Building Secure and Robust J2EE Applications".

Chapter 7. J2SE Security Fundamentals
7.1 Access to Classes, Interfaces, Fields, and Methods
7.2 Class Loaders
7.3 The Class File Verifier
7.4 The Security Manager
7.5 Interdependence of the Three Java Security Legs
7.6 Summary
Chapter 8. The Java 2 Permission Model
8.1 Overview of the Java 2 Access-Control Model
8.2 Java Permissions
8.3 Java Security Policy
8.4 The Concept of CodeSource
8.5 ProtectionDomains
8.6 The Basic Java 2 Access-Control Model
8.7 Privileged Java 2 Code
8.8 ProtectionDomain Inheritance
8.9 Performance Issues in the Java 2 Access-Control Model
8.10 Summary

P.S. Книга уже есть на concurrentlib.livejournal.com.

Manage SoftReference time-to-live

Оказывается временем жизни SoftReference возможно управлять.
Для этого необходимо использовать опцию HotSpot JVM - -XX:SoftRefLRUPolicyMSPerMB.

Best Practices for Large-Scale Web Sites -- Lessons from eBay

Best Practices for Large-Scale Web Sites -- Lessons from eBay.

"There may be no better example of a company who has met the demands of Internet scale than eBay, with 88.300.000 active users worldwide, over 2*10^9 page views, and 48*10^9 SQL executions every day. And there may be no one more qualified to discuss those demands than Randy Shoup, architect of the eBay web site and primary architect of eBay's search infrastructure."
"
* Partition everything.
* Asynchrony everywhere.
* Automate everything.
* Remember, everything fails.
* Embrace inconsistency."

"The system generates over 2 TB of log messages per day."

"Like any large, scaled Internet site, eBay has found itself bound by the CAP theorem, first proposed by Eric Brewer in July 2000. Briefly stated, the theorem shows that any shared-data system can have at most two of the following properties:
* Consistency: All clients see the same data, even in the presence of updates.
* Availability: All clients will get a response, even in the presence of failures.
* Partition-tolerance: The system properties hold even when the network is partitioned, as by a network hardware failure.
The trade-off among these three properties is fundamental to all distributed systems."

вторник, 1 декабря 2009 г.

ROCK Hardware Transactional memory - Sun technical report

ROCK Hardware Transactional memory - Sun technical report
Abstract
We report on our experience with the hardware transactional memory (HTM) feature of two revisions of a prototype multicore processor. Our experience includes a number of promising results using HTM to improve performance in a variety of contexts, and also identifies some ways in which the feature could be improved to make it even better. We give detailed accounts of our experiences, sharing techniques we used to achieve the results we have, as well as describing challenges we faced in doing so. This technical report expands on our ASPLOS paper [9], providing more detail and reporting on additional work conducted since that paper was written.

"...In Sections 4 through 10, we present results from our experiments using HTM in a number of contexts: We use HTM to implement simple operations such as incrementing a counter (in Section 4) and a double compare-and-swap (DCAS). We then use the DCAS to reimplement some components of the JavaTM concurrency libraries (see Section 5). Next, we experiment with transactional hash tables (in Section 6) and red-black trees (in Section 7)..."

P.S. From Davide Dice blog.

Множество материала по Scala

На главном сайте Scala обнаружено множество материала - вот. Включая даже, скажем, PhD Thesis.