As an effective multicast application mechanism, the application layer multicast (ALM) determines the path of data transmission through a routing tree. In practical applications, multiple multicast sessions often occur simultaneously; however, few studies have considered this situation. A feasible solution is to sequentially optimize each co-existing ALM routing tree. However, this approach can lead to node congestion, and, even if the node out-degree reservation strategy is adopted, an optimal solution may not be obtained. In this study, to solve the problem of routing tree construction for multiple co-existing application layer multicast sessions, an optimization model that minimizes the overall delay and instability is constructed, and a one-off optimization method based on the discrete artificial fish swarm algorithm (DAFSA) is proposed. First, Steiner node sets corresponding to the multicast sessions are selected. Then, the routing trees for each multicast session are obtained through the improved spanning tree algorithm based on the complete graph composed of Steiner node sets. The experimental results show that the proposed method can simultaneously obtain multiple co-existing ALM routing trees with a low total delay and low instability. Even if the input is a single multicast session, it can lead to ALM routing trees with a lower delay and less instability than other algorithms, and the introduction of a penalty function can effectively avoid the problem of excessive replication and forwarding loads on some end-hosts. In addition, the proposed algorithm is insensitive to parameter changes and exhibits good stability and convergence properties for networks of different sizes.