~/.profile is the right place for environment variable definitions and for non-graphical programs that you want to run when you log in (e.g. ssh-agent, screen -m). It is executed by your login shell if that is a Bourne-style shell (sh, ksh, bash). Zsh runs ~/.zprofile instead, and Csh and tcsh run ~/.login.
If you log in under an X display manager (xdm, gdm, kdm, ...), whether ~/.profile is run depends how your display manager and perhaps desktop environment were configured by your distribution. If you log in under a “custom session”, that usually executes ~/.xsession.
~/.bashrc is the right place for bash-specific settings, such as aliases, functions, shell options and prompts. As the name indicates, it is specific to bash; csh has ~/.cshrc, ksh has ~/.kshrc, and zsh has <drumroll> ~/.zshrc.
See also:
Difference between .bashrc and .bash_profile
Which setup files should be used for setting up environment variables with bash?
Zsh not hitting ~/.profile