code: private void processEnvelope(Envelope envelope) {
  
          ActorScope scope = envelope.getScope();
  
          if (actorSystem.getTraceInterface() != null) {
              actorSystem.getTraceInterface().onEnvelopeDelivered(envelope);
          }
  
          long start = ActorTime.currentTime();
          if (scope.getActor() == null) {
  
              if (envelope.getMessage() == PoisonPill.INSTANCE) {
                  // Not creating actor for PoisonPill
                  return;
              }
  
              try {
                  Actor actor = scope.getProps().create();
                  actor.initActor(scope.getPath(), new ActorContext(scope), scope.getMailbox());
                  ThreadDispatcher.pushDispatcher(actor.getDispatcher());
                  try {
                      actor.preStart();
                  } finally {
                      ThreadDispatcher.popDispatcher();
                  }
  
                  scope.onActorCreated(actor);
              } catch (Exception e) {
                  e.printStackTrace();
                  if (envelope.getSender() != null) {
                      envelope.getSender().send(new DeadLetter("Unable to create actor"));
                  }
                  return;
              }
          }
  
          try {
              if (envelope.getMessage() == StartActor.INSTANCE) {
                  // Already created actor
              } else if (envelope.getMessage() == PoisonPill.INSTANCE) {
                  ThreadDispatcher.pushDispatcher(scope.getActor().getDispatcher());
                  try {
                      scope.getActor().postStop();
                  } finally {
                      ThreadDispatcher.popDispatcher();
                  }
                  onActorDie(scope);
              } else {
                  scope.getActor().handleMessage(envelope.getMessage(), envelope.getSender());
              }
          } catch (Exception e) {
              if (actorSystem.getTraceInterface() != null) {
                  actorSystem.getTraceInterface().onActorDie(scope.getActorRef(), envelope, e);
              }
              ThreadDispatcher.pushDispatcher(scope.getActor().getDispatcher());
              try {
                  scope.getActor().postStop();
              } finally {
                  ThreadDispatcher.popDispatcher();
              }
              onActorDie(scope);
          } finally {
              if (actorSystem.getTraceInterface() != null) {
                  actorSystem.getTraceInterface().onEnvelopeProcessed(envelope, ActorTime.currentTime() - start);
              }
          }
      }
docs: Processing of envelope
  
  @param envelope envelope