Как java поток выбирает ядро процессора?
ни джава ни твоя программа никак не распределяет потоки процессов.
это отдельная служба ядра ОС - Диспетчер операционной системы.
как реализовано выбор проца для исполнения смотри в тех.документации на ОС.
обычно потоки не привязаны к процессорам, что есть свободное туда и пихают.
Как я понял, ядра имеют доступ только к своему L1 кэшу, а если поток будет исполняться на другом ядре, то он не увидит свои объекты, которые находятся в кэше другого ядра
Я правильно мыслю?
Нет. Все системы поддерживающие SMP имеют когерентный кеш. Т.е. если ядро обращается к данным, находящимся в L1 кеше другого ядра, то данные перемещаются в кеш запрашивающего ядра. См.