Если производительность критична, я бы предложил сделать поля либо закрытыми, если доступ к ним осуществляется только в том же классе, либо в локальном пакете, если доступ к ним осуществляется в другом классе. Если вы укажете внутренним / вложенным классам закрытые поля, компилятор добавит / использует методы доступа (так как виртуальная машина не позволяет классам обращаться к полям в другом классе, хотя Java это делает)
Наличие открытых изменяемых полей наводит меня на мысль о дизайне. Распределение кода, критичного к производительности между пакетами, не предполагает такого строгого кодирования, который необходим для кода, критичного к производительности.
Если у вас есть неизменяемые поля, у меня нет проблем с обнародованием полей, если вы ожидаете более высокую стоимость разработки, если поля изменяют поведение. На самом деле я предлагаю использовать открытые неизменяемые поля, если вы считаете, что это делает код проще / легче для понимания.
Однако, первым приоритетом должна быть читаемость кода. Самый простой код часто работает лучше всего.