Skip to content

Commit ea37e72

Browse files
0.19.0
1 parent 4891f3c commit ea37e72

File tree

1 file changed

+170
-0
lines changed

1 file changed

+170
-0
lines changed

CHANGES.md

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,175 @@
11
# RxJava Releases #
22

3+
### Version 0.19.0 ([Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.netflix.rxjava%22%20AND%20v%3A%220.19.0%22)) ###
4+
5+
#### Performance and Object Allocation
6+
7+
Fairly significant object allocation improvements are included in this release which reduce GC pressure and improve performance.
8+
9+
Two pull requests (amongst several) with details are:
10+
11+
- https://github.com/Netflix/RxJava/pull/1281 Reduce Subscription Object Allocation
12+
- https://github.com/Netflix/RxJava/pull/1246 Moved to atomic field updaters
13+
14+
With the following simple test code relative performance has increased as shown below:
15+
16+
```java
17+
Observable<Integer> o = Observable.just(1);
18+
o.map(i -> {
19+
return String.valueOf(i);
20+
}).map(i -> {
21+
return Integer.parseInt(i);
22+
}).subscribe(observer);
23+
```
24+
25+
26+
###### Rx 0.19
27+
28+
```
29+
Run: 10 - 10,692,099 ops/sec
30+
Run: 11 - 10,617,627 ops/sec
31+
Run: 12 - 10,938,405 ops/sec
32+
Run: 13 - 10,917,388 ops/sec
33+
Run: 14 - 10,783,298 ops/sec
34+
```
35+
36+
###### Rx 0.18.4
37+
38+
```
39+
Run: 11 - 8,493,506 ops/sec
40+
Run: 12 - 8,403,361 ops/sec
41+
Run: 13 - 8,400,537 ops/sec
42+
Run: 14 - 8,163,998 ops/sec
43+
```
44+
45+
###### Rx 0.17.6
46+
47+
```
48+
Run: 10 - 4,930,966 ops/sec
49+
Run: 11 - 6,119,951 ops/sec
50+
Run: 12 - 7,062,146 ops/sec
51+
Run: 13 - 6,514,657 ops/sec
52+
Run: 14 - 6,369,426 ops/sec
53+
```
54+
55+
###### Rx 0.16.1
56+
57+
```
58+
Run: 10 - 2,879,355 ops/sec
59+
Run: 11 - 3,236,245 ops/sec
60+
Run: 12 - 4,468,275 ops/sec
61+
Run: 13 - 3,237,293 ops/sec
62+
Run: 14 - 4,683,840 ops/sec
63+
```
64+
65+
Note that these numbers are relative as they depend on the JVM and hardware.
66+
67+
68+
#### Scala Changes
69+
70+
Many missing operators have been added to the RxScala APIs along with fixes and other maturation.
71+
72+
73+
#### toBlockingObservable() -> toBlocking()
74+
75+
The `toBlockingObservable()` method has been deprecated in favor of `toBlocking()` for brevity and fit better with possible future additions such as `toParallel()` without always needing the `Observable` suffix.
76+
77+
78+
#### forEach
79+
80+
`forEach` as added as an alias for `subscribe` to match the Java 8 naming convention.
81+
82+
This means code can now be written as:
83+
84+
```java
85+
Observable.from(1, 2, 3).limit(2).forEach(System.out::println);
86+
```
87+
88+
which is an alias of this:
89+
90+
```java
91+
Observable.from(1, 2, 3).take(2).subscribe(System.out::println);
92+
```
93+
94+
Since `forEach` exists on `BlockingObservable` as well, moving from non-blocking to blocking looks like this:
95+
96+
```java
97+
// non-blocking
98+
Observable.from(1, 2, 3).limit(2).forEach(System.out::println);
99+
// blocking
100+
Observable.from(1, 2, 3).limit(2).toBlocking().forEach(System.out::println);
101+
```
102+
103+
104+
#### Schedulers
105+
106+
Thread caching is restored to `Schedulers.io()` after being lost in v0.18.
107+
108+
A replacement for `ExecutorScheduler` (removed in 0.18) is accessible via `Schedulers.from(Executor e)` that wraps an `Executor` and complies with the Rx contract.
109+
110+
111+
#### ReplaySubject
112+
113+
All "replay" functionality now exists directly on the `ReplaySubject` rather than in an internal type. This means there are now several different `create` methods with the various overloads of size and time.
114+
115+
116+
#### Changelist
117+
118+
* [Pull 1165](https://github.com/Netflix/RxJava/pull/1165) RxScala: Add dropUntil, contains, repeat, doOnTerminate, startWith, publish variants
119+
* [Pull 1183](https://github.com/Netflix/RxJava/pull/1183) NotificationLite.accept performance improvements
120+
* [Pull 1177](https://github.com/Netflix/RxJava/pull/1177) GroupByUntil to use BufferUntilSubscriber
121+
* [Pull 1182](https://github.com/Netflix/RxJava/pull/1182) Add facilities for creating Observables from JavaFX events and ObservableValues
122+
* [Pull 1188](https://github.com/Netflix/RxJava/pull/1188) RxScala Schedulers changes
123+
* [Pull 1175](https://github.com/Netflix/RxJava/pull/1175) Fixed synchronous ConnectableObservable.connect problem
124+
* [Pull 1172](https://github.com/Netflix/RxJava/pull/1172) ObserveOn: Change to batch dequeue
125+
* [Pull 1191](https://github.com/Netflix/RxJava/pull/1191) Fix attempt for OperatorPivotTest
126+
* [Pull 1195](https://github.com/Netflix/RxJava/pull/1195) SwingScheduler: allow negative schedule
127+
* [Pull 1178](https://github.com/Netflix/RxJava/pull/1178) Fix RxScala bug
128+
* [Pull 1210](https://github.com/Netflix/RxJava/pull/1210) Add more operators to RxScala
129+
* [Pull 1216](https://github.com/Netflix/RxJava/pull/1216) RxScala: Exposing PublishSubject
130+
* [Pull 1208](https://github.com/Netflix/RxJava/pull/1208) OperatorToObservableList: use LinkedList to buffer the sequence’s items
131+
* [Pull 1185](https://github.com/Netflix/RxJava/pull/1185) Behavior subject time gap fix 2
132+
* [Pull 1226](https://github.com/Netflix/RxJava/pull/1226) Fix bug in `zipWithIndex` and set `zip(that, selector)` public in RxScala
133+
* [Pull 1224](https://github.com/Netflix/RxJava/pull/1224) Implement shorter toBlocking as shorter alias for toBlockingObservable.
134+
* [Pull 1223](https://github.com/Netflix/RxJava/pull/1223) ReplaySubject enhancement with time and/or size bounds
135+
* [Pull 1160](https://github.com/Netflix/RxJava/pull/1160) Add `replay` and `multicast` variants to RxScala
136+
* [Pull 1229](https://github.com/Netflix/RxJava/pull/1229) Remove Ambiguous Subscribe Overloads with Scheduler
137+
* [Pull 1232](https://github.com/Netflix/RxJava/pull/1232) Adopt Limit and ForEach Java 8 Naming Conventions
138+
* [Pull 1233](https://github.com/Netflix/RxJava/pull/1233) Deprecate toBlockingObservable in favor of toBlocking
139+
* [Pull 1237](https://github.com/Netflix/RxJava/pull/1237) SafeSubscriber memory reduction
140+
* [Pull 1236](https://github.com/Netflix/RxJava/pull/1236) CompositeSubscription with atomic field updater
141+
* [Pull 1243](https://github.com/Netflix/RxJava/pull/1243) Remove Subscription Wrapper from Observable.subscribe
142+
* [Pull 1244](https://github.com/Netflix/RxJava/pull/1244) Observable.from(T) using Observable.just(T)
143+
* [Pull 1239](https://github.com/Netflix/RxJava/pull/1239) RxScala: Update docs for "apply" and add an example
144+
* [Pull 1248](https://github.com/Netflix/RxJava/pull/1248) Fixed testConcurrentOnNextFailsValidation
145+
* [Pull 1246](https://github.com/Netflix/RxJava/pull/1246) Moved to atomic field updaters.
146+
* [Pull 1254](https://github.com/Netflix/RxJava/pull/1254) ZipIterable unsubscription fix
147+
* [Pull 1247](https://github.com/Netflix/RxJava/pull/1247) Add zip(iterable, selector) to RxScala
148+
* [Pull 1260](https://github.com/Netflix/RxJava/pull/1260) Fix the bug that BlockingObservable.singleOrDefault doesn't call unsubscribe
149+
* [Pull 1269](https://github.com/Netflix/RxJava/pull/1269) Fix the bug that int overflow can bypass the range check
150+
* [Pull 1272](https://github.com/Netflix/RxJava/pull/1272) ExecutorScheduler to wrap an Executor
151+
* [Pull 1264](https://github.com/Netflix/RxJava/pull/1264) ObserveOn scheduled unsubscription
152+
* [Pull 1271](https://github.com/Netflix/RxJava/pull/1271) Operator Retry with predicate
153+
* [Pull 1265](https://github.com/Netflix/RxJava/pull/1265) Add more operators to RxScala
154+
* [Pull 1281](https://github.com/Netflix/RxJava/pull/1281) Reduce Subscription Object Allocation
155+
* [Pull 1284](https://github.com/Netflix/RxJava/pull/1284) Lock-free, MPSC-queue
156+
* [Pull 1288](https://github.com/Netflix/RxJava/pull/1288) Ensure StringObservable.from() does not perform unnecessary read
157+
* [Pull 1286](https://github.com/Netflix/RxJava/pull/1286) Rename some Operator* classes to OnSubscribe*
158+
* [Pull 1276](https://github.com/Netflix/RxJava/pull/1276) CachedThreadScheduler
159+
* [Pull 1287](https://github.com/Netflix/RxJava/pull/1287) ReplaySubject remove replayState CHM and related SubjectObserver changes
160+
* [Pull 1289](https://github.com/Netflix/RxJava/pull/1289) Schedulers.from(Executor)
161+
* [Pull 1290](https://github.com/Netflix/RxJava/pull/1290) Upgrade to JMH 0.7.3
162+
* [Pull 1293](https://github.com/Netflix/RxJava/pull/1293) Fix and Update JMH Perf Tests
163+
* [Pull 1291](https://github.com/Netflix/RxJava/pull/1291) Check unsubscribe within observable from future
164+
* [Pull 1294](https://github.com/Netflix/RxJava/pull/1294) rx.operators -> rx.internal.operators
165+
* [Pull 1295](https://github.com/Netflix/RxJava/pull/1295) Change `void accept` to `boolean accept`
166+
* [Pull 1296](https://github.com/Netflix/RxJava/pull/1296) Move re-used internal Scheduler classes to their own package
167+
* [Pull 1298](https://github.com/Netflix/RxJava/pull/1298) Remove Bad Perf Test
168+
* [Pull 1301](https://github.com/Netflix/RxJava/pull/1301) RxScala: Add convenience method for adding unsubscription callback
169+
* [Pull 1304](https://github.com/Netflix/RxJava/pull/1304) Add flatMap and concatMap to RxScala
170+
* [Pull 1306](https://github.com/Netflix/RxJava/pull/1306) Hooked RxJavaPlugins errorHandler up within all operators that swallow onErrors
171+
* [Pull 1309](https://github.com/Netflix/RxJava/pull/1309) Hide ChainedSubscription/SubscriptionList from Public API
172+
3173
### Version 0.18.4 ([Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.netflix.rxjava%22%20AND%20v%3A%220.18.4%22)) ###
4174

5175
This is a fix for `CompositeSubscription` object allocation problems. Details can be found in issue [#1204](https://github.com/Netflix/RxJava/issues/1204).

0 commit comments

Comments
 (0)