Обязателен ли C/C++ при изучении java?
Нет не обязателен. Тем более в начале изучения. Но понимать как оно работает изнутри очень полезно и для этого можно почитать умные книжки про устройство вычислительных машин, а чтоб попрактиковаться в низкоуровневом программировании, учите C, (C++ уж больно огромный и учить его и не использовать смысла нет) и ассемблер. Но я имею ввиду не прям все тонкости, а чтоб понять в общем, как работает программа, как устроена память, какие есть регистры у процессора и почему они быстрее, чем стек и т.д. 
Из книг по си, могу посоветовать 
"Керниган,Ритчи - Программирование на C"
"Столяров А.В. - Программирование на языке ассемблера NASM для ОС UNIX - 2011". 
"Танненбаум - Архитектура компьютера" (сам пока не начал читать, но отзывы  ней хорошие)
А вообще, если есть время, попробуйте C++, вдруг понравится, в новых стандартах там уже не нужно писать User *obj = new User; и бояться утечек памяти, почти как в джаве, только без тормозного GC. 
Но конечно всё ещё зависит от того, кем Вы хотите стать и сколько у Вас времени на обучение, если вы собираетесь натягивать сайты на фреймворки, то асм/си/си++ вам не особо то и нужен, ну а если мало времени на обучение, не тратьте его зря.
Для DirectX C/C++ (плюс язык шейдеров HLSL) обязательны.