База Hintsage

Программирование Java

Язык Java, JVM и экосистема серверной разработки.

Темы раздела

Выберите подраздел

  • 50 вопросов

    Java Core

    Базовая семантика языка, типы, методы, классы и ключевые конструкции.

    Открыть раздел
  • 50 вопросов

    ООП и система типов

    Наследование, полиморфизм, интерфейсы, классы и разрешение методов.

    Открыть раздел
  • 50 вопросов

    Коллекции

    Java Collections Framework, контракты, реализации и сложность операций.

    Открыть раздел
  • 50 вопросов

    Многопоточность

    Java Memory Model, потоки, синхронизация и java.util.concurrent.

    Открыть раздел
  • 50 вопросов

    JVM и память

    Загрузка классов, память JVM, GC, JIT и диагностика.

    Открыть раздел
  • 50 вопросов

    Generics

    Параметризация типов, bounds, wildcards и стирание типов.

    Открыть раздел
  • 50 вопросов

    Stream API

    Функциональные интерфейсы, streams, collectors и параллельная обработка.

    Открыть раздел
  • 50 вопросов

    Исключения

    Иерархия исключений, обработка ошибок и управление ресурсами.

    Открыть раздел

Практика

Вопросы: Программирование Java

В пуле потоков после обработки множества задач растёт heap. Определите, какая ссылка в этом коде может удерживать большие массивы после завершения задач.

import java.util.concurrent.*;

public class Demo {
    static void handle() {
        ThreadLocal<byte[]> local = new ThreadLocal<>();
        local.set(new byte[10_000_000]);
    }

    public static void main(String[] args) throws Exception {
        ExecutorService pool = Executors.newFixedThreadPool(1);
        for (int i = 0; i < 1_000; i++) {
            pool.submit(Demo::handle).get();
        }
        pool.shutdown();
    }
}

Представьте, что Resource передаёт нативному коду внутреннее состояние, а очистку выполняет Cleaner. Зачем в конце метода нужна Reference.reachabilityFence(this)?

import java.lang.ref.Reference;
import java.lang.ref.Cleaner;

final class Resource implements AutoCloseable {
    static final Cleaner CLEANER = Cleaner.create();
    static final class State implements Runnable {
        public void run() { System.out.println("cleanup"); }
    }

    private final State state = new State();
    private final Cleaner.Cleanable cleanable = CLEANER.register(this, state);

    void use() {
        nativeCall(state);
        Reference.reachabilityFence(this);
    }

    static void nativeCall(State state) { /* длительный JNI-вызов */ }
    public void close() { cleanable.clean(); }
}
Программирование JavaJVM и памятьСтарший разработчик Java с опытом JNI и управления нативными ресурсами

Показано 241–260 из 403

Восстановление доступа