V$table are fixed HARD CODED structures of memory.
U can check this very simple:

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 218918824 bytes
Fixed Size 282536 bytes
Variable Size 176160768 bytes
Database Buffers 41943040 bytes
Redo Buffers 532480 bytes
SQL> set lines 120
SQL> set pages 9999
SQL> desc v$instance
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
INSTANCE_NUMBER NUMBER
INSTANCE_NAME VARCHAR2(16)
HOST_NAME VARCHAR2(64)
VERSION VARCHAR2(17)
STARTUP_TIME DATE
STATUS VARCHAR2(7)
PARALLEL VARCHAR2(3)
THREAD# NUMBER
ARCHIVER VARCHAR2(7)
LOG_SWITCH_WAIT VARCHAR2(11)
LOGINS VARCHAR2(10)
SHUTDOWN_PENDING VARCHAR2(3)
DATABASE_STATUS VARCHAR2(17)
INSTANCE_ROLE VARCHAR2(18)
ACTIVE_STATE VARCHAR2(9)

SQL> select sid, program from v$session;

SID PROGRAM
---------- ----------------------------------------
1 ORACLE.EXE
2 ORACLE.EXE
3 ORACLE.EXE
4 ORACLE.EXE
5 ORACLE.EXE
6 ORACLE.EXE
7 sqlplus.exe

7 rows selected.

SQL> select * from v$sysstat where rownum < 20;

STATISTIC# NAME
CLASS VALUE
------------------------------------------------ ---------- ----------
0 logons cumulative 1 7
1 logons current 1 7
2 opened cursors cumulative 1 9
3 opened cursors current 1 1
4 user commits 1 0
5 user rollbacks 1 0
6 user calls 1 64

In this point (when started up only instance we may not have
data dictionary) for example when we going to install new db.
bat all v$tables exists!
-----------------------------------------------------------
AND SQL.BSQ didn't execute before.
-----------------------------------------------------------

SQL> alter database mount;

Database altered.

SQL> alter database open;

Database altered.