Сборка мусора запускается при загрузке большого файла - PullRequest
0 голосов
/ 29 ноября 2018

Нам нужно загрузить несколько больших файлов из S3 и сохранить их на локальном диске.Мы видим, что всякий раз, когда происходит загрузка, запускается GC.Во время GC отзывчивость системы уменьшается и увеличивает задержку некоторых вызовов в системе.Ниже приведен код, который мы используем для загрузки из облака.Максимум 8 потоков будут загружаться параллельно.Есть ли что-нибудь, что мы можем сделать более эффективно

    final GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName,
                    key);
    long startIndex = 0L;
    long endIndex = maxBytesToReadPerSecond;
    final long length = metadata.getContentLength();
    final int bufferSize = 1024 * 10;
    final byte[] buffer = new byte[bufferSize];
    try (OutputStream output = new BufferedOutputStream(new FileOutputStream(destinationFile))) {
        while (startIndex < length) {
            this.rateLimiter.acquire(maxBytesToReadPerSecond);//throttles download
            if (length - startIndex < maxBytesToReadPerSecond) {
                getObjectRequest.setRange(startIndex);
            } else {
                getObjectRequest.setRange(startIndex, endIndex);
            }
            final S3Object s3Object = this.getS3Client().getObject(getObjectRequest);
            int bytesRead = 0;
            int bytesReadTotal = 0;
            while ((bytesRead = s3Object.getObjectContent().read(buffer)) > -1) {
                output.write(buffer, 0, bytesRead);
                bytesReadTotal += bytesRead;
            }
            startIndex = startIndex + bytesReadTotal;
            endIndex = (endIndex + maxBytesToReadPerSecond > length) ? length : endIndex + maxBytesToReadPerSecond;
        }
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...