code: @CheckReturnValue
      @NonNull
      public static <T> ReplayRelay<T> createWithTimeAndSize(long maxAge, TimeUnit unit, Scheduler scheduler, int maxSize) {
          return new ReplayRelay<T>(new SizeAndTimeBoundReplayBuffer<T>(maxSize, maxAge, unit, scheduler));
      }
docs: Creates a time- and size-bounded replay subject.
  <p>
  In this setting, the {@code ReplayRelay} internally tags each received item with a timestamp value
  supplied by the {@link Scheduler} and holds at most {@code size} items in its internal buffer. It evicts
  items from the start of the buffer if their age becomes less-than or equal to the supplied age in
  milliseconds or the buffer reaches its {@code size} limit.
  <p>
  When observers subscribe to a terminated {@code ReplayRelay}, they observe the items that remained in
  the buffer after the terminal notification, regardless of their age, but at most {@code size} items.
  <p>
  If an observer subscribes while the {@code ReplayRelay} is active, it will observe only those items
  from within the buffer that have age less than the specified time and each subsequent item, even if the
  buffer evicts items due to the time constraint in the mean time. In other words, once an observer
  subscribes, it observes items without gaps in the sequence except for the outdated items at the beginning
  of the sequence.
  <p>
  Note that terminal notifications ({@code onError} and {@code onComplete}) trigger eviction as well. For
  example, with a max age of 5, the first item is observed at T=0, then an {@code onComplete} notification
  arrives at T=10. If an observer subscribes at T=11, it will find an empty {@code ReplayRelay} with just
  an {@code onComplete} notification.
  
  @param maxAge
  the maximum age of the contained items
  @param unit
  the time unit of {@code time}
  @param maxSize
  the maximum number of buffered items
  @param scheduler
  the {@link Scheduler} that provides the current time