Both functions return permalink to the post or page by it's ID. What are the differences and which of these functions should I use in which cases?
When i explored the WordPress core for this answer i found that get_permalink() function internally calls get_page_link() function for getting permalink of page and it calls get_post_permalink() function to get permalink of post.
In my opinion
get_page_link is for displaying the link and
get_permalink is not for displaying the link.
WordPress Codex says:
get_permalink: It does NOT display the permalink.