According to the performance test in https://issues.apache.org/jira/browse/SPARK-31783, the performance gain is mainly related to the nnz of block.
So it is reasonable to control the size of block.
I had some offline discuss with weichenxu123, then we think following changes are worthy：
1, infer an appropriate blockSize (MB) based on numFeatures and nnz by default;
2, impls should use a relative small memory footprint when processing one block, and should not use a large pre-allocated buffer, so we need to revert gmm;
3, use new blockify strategy in LinearSVC/LoR/LiR/AFT;