### Godot version

4.1.stable

### System information

Godot v4.1.stable - elementary OS 7 Horus 7 (Ubuntu 22.04) - Vulkan (Mobile) - dedicated AMD Radeon RX 6600 (RADV NAVI23) () - Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz (6 Threads)

### Issue description

Tilemap has a memory leak where if you repeatedly change the tile (that has collidable physics) of cells, the static memory (shown in the debugger) increases and stays there. This only happens if you have a physics layer in the Tileset and one of the tiles is collidable.

Also the memory usage is extremely high even when generating the map once. A 1000x1000 tiles map uses 1.4 GB of memory!

Workaround is simple. Simply clear the tilemap with `clear()` before you change the map.

### Steps to reproduce

1. Create a TileMap node
2. Create a TileSet containing two tiles on the atlas coordinates `(0, 0)` and `(1, 0)`
3. Create a Physics Layer in the TileSet and make one of the tiles fully collidable
4. Attach a script to the TileMap
5. Set the script to this
```
extends TileMap

func _process(delta):
	if Input.is_key_pressed(KEY_SPACE):
		for i in range(5000):
			set_cell(0, Vector2i(i, 0), 0, Vector2i(randi_range(0, 1), 0))
```
6. Run the scene
7. Go into "Debugger" tab in the editor while the scene is running
8. Press the "Monitors" tab press and observe the "Static" memory
9. Now hold down the space bar and observe the static memory climbing but never coming down
10. To workaround the problem simply add `clear()` before the loop like this:
```
extends TileMap

func _process(delta):
	if Input.is_key_pressed(KEY_SPACE):
		clear()
		for i in range(5000):
			set_cell(0, Vector2i(i, 0), 0, Vector2i(randi_range(0, 1), 0))
```

### Minimal reproduction project

[tilemapmemoryleak.zip](https://github.com/godotengine/godot/files/12064640/tilemapmemoryleak.zip)
virtual void set_light_mask(int p_light_mask) override;
	virtual void set_material(const Ref<Material> &p_material) override;
	virtual void set_use_parent_material(bool p_use_parent_material) override;
	virtual void set_texture_filter(CanvasItem::TextureFilter p_texture_filter) override;
	virtual void set_texture_repeat(CanvasItem::TextureRepeat p_texture_repeat) override;
	
	Vector2i get_coords_for_body_rid(RID p_physics_body);
	
	int get_layer_for_body_rid(RID p_physics_body);
	
	void fix_invalid_tiles();
	
	void clear_layer(int p_layer);
	void clear();
	
	void force_update(int p_layer = -1);
	
	TypedArray<Vector2i> get_surrounding_cells(const Vector2i &coords);
	void draw_cells_outline(Control *p_control, const RBSet<Vector2i> &p_cells, Color p_color, Transform2D p_transform = Transform2D());
	
	GDVIRTUAL2R(bool, _use_tile_data_runtime_update, int, Vector2i);
	GDVIRTUAL3(_tile_data_runtime_update, int, Vector2i, TileData *);
	
	PackedStringArray get_configuration_warnings() const override;
	TileMap();
	~TileMap();
};
VARIANT_ENUM_CAST(TileMap::VisibilityMode);
#endif