All mesh, or 3D modeled virtual objects for that matter, are "hollow" or "empty inside" by definition, there is no such thing as mass, dense volume or matter inside them, with the possible exception of actual volumetric data like voxels or point clouds.
Concepts
Boolean operations on meshes are always performed as mathematical calculations over the surfaces to simulate the existence of a dense "filled" object, by combining the surfaces of the intervening objects through cutting, intersecting and or subtracting operations. The results happen only on the "shell" or faces of the mesh surface, to give the impression of having dense interior, when in reality there is none.
For that reason mostly only coherent, closed, "watertight" manifold meshes are successfully usable in fruitful Boolean operations outside of CAD applications, that use either ACIS Solid Modeling, NURBS based surfaces, or other geometry representation models more suited for these types of operations (and even these are all hollow as well, despite the application best efforts make you believe otherwise).
Open or inconsistent meshes (non-manifold) often give problems, errors, bad results, or fail completely.
Diagnosis
That being said, in your case if you can't preform a Boolean operation on your object it is most likely because your mesh is either too complex for the application to handle or has one of multiple common geometry issues.
Boolean operations on meshes are limited at best. If there are errors in your objects like discontinuities, wholes, inconsistent normals, overlapping geometry, or any other geometry problems that make your mesh non-manifold or non watertight they will fail to various degrees.
There are also complexity limits that can be handled. If you are reaching Blender, the algorithms, hardware, or available resources limits, you should break down your objects into more manageable chunks.
Possible solutions
There are many common issues with Booleans and very well known solutions to deal with them that have been thoroughly covered before. What you need to do is clean up your meshes and make sure these errors and discontinuities are gone.
Stuff you can try:
Removing doubles - Edit Mode > W > Remove Doubles (Alt + M > By Distance for 2.8+), to merge all open or coincident geometry.
Recalculate normals - In Edit Mode Ctrl + N (Alt + N for 2.8+) to make sure all surfaces are facing the same direction consistently.
Check for holes - In Edit Mode press Space Bar and search for Select non Manifold. That should highlight any remaining wholes, or problems with your mesh which you must then solve by hand, like overlapping faces, inconsistent normals, missing geometry, etc.
Ensure there are no coinciding or coplanar surfaces between the two operands - These usually confuse the algorithm making it unable to distinguish in from out.
Eliminate any intersecting edges - If edges intersect between two operands (common with symmetric objects, geometric or orthogonal shapes, hard surface modeling, among others) operations will likely fail, this is a known limitation of current Boolean algorithm. Nudge them around very small distances, or rotate them micrometrically if need be to break perfect alignments.
Search for self intersections which are common in data obtained from scanned data like 3D Scans, photogrammetry, or other real world captured data. Solving this will be mostly a manual process as there are no current built in tools to handle them automatically, but you can turn on Mesh Analysis from the Overlays popover to get a good indication of problematic areas.
After that your Boolean operation stands a better chance to produce good results, if your mesh is not too overly complex to successfully be processed. If that is the case the you should break it apart into smaller objects making sure that each and every one of them involved in Boolean operations is a watertight "closed" manifold mesh.
For Blender 2.8+ you can also try different calculation methods for the Boolean Modifier, like the Fast or Exact options, depending on the type of mesh you have.