|
1 | 1 | # RxJava Releases #
|
2 | 2 |
|
| 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 | + |
3 | 173 | ### 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)) ###
|
4 | 174 |
|
5 | 175 | 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