I'm trying to create a small 2D game within LWJGL however, large maps drop the frame rate from around 3000 to about 15. I know this is mainly caused because it's drawing every tile on the screen even though you can only see a small portion of them. I'd like to know how to find which tiles would be visible and only print them to the screen.
This is called culling, one of the best known techniques is frustum culling
. Generally, you define a bounding volume and test if an object lies within it.
For example, in 2D you could define a rectangle (identical to your window/viewport) and for each object (tile/sprite/whatever) define a bounding box. A circle is an easy bounding box to test, but a rectangle would work as well.
Then you simply test if your object's bounding box and the viewport rectangle intersect. If so, draw it, otherwise, don't.
Also see this answer on another SE site for more detailed information about 2d culling.