首页 > 系统相关 >反射(类加载内存分析)

反射(类加载内存分析)

时间:2022-09-28 11:04:23浏览次数:147  
标签:初始化 反射 System 内存 println 加载 out

java内存图:

反射(类加载内存分析)_加载

 

 类的加载过程:

反射(类加载内存分析)_静态代码块_02

 

加载

   将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象

链接

   将java类的二进制代码合并到JVM的运行状态之中的过程

    1)验证:确保加载的类信息符合JVM规范,没有安全方面的问题

    2)准备:正式为类变量(static)分配内存并设置默认初始值的阶段,这些内存都将在方法区中进行分配。

    3)解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程

初始化:


1)执行类构造器<clinit>()方法的过程,类构造器<clinit>()方法是由编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。

2)当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化

3)虚拟机会保证一个类<clinit>()方法在多线程环境中被正确加锁和同步

 

 

代码测试:

1 package reflection;
2
3 import org.w3c.dom.ls.LSOutput;
4
5 public class test05 {
6 public static void main(String[] args) {
7
8 A a = new A();
9 System.out.println(A.m);
10
11
12 /*
13 * 1)加载到内存,会产生一个对应Class对象
14 * 2)链接,链接结束后m=0
15 * 3)初始化
16 * <clinit>() {
17 * System.out.println("A类静态代码块初始化");
18 m = 300;
19 * m = 100;
20 * }
21 *
22 * m = 100;
23 *
24 * */
25
26 }
27
28
29 }
30
31 class A {
32
33 static {
34 System.out.println("A类静态代码块初始化");
35 m = 300;
36 }
37 static int m = 100;
38
39 public A() {
40 System.out.println("A类的无参构造初始化");
41 }
42

 

分析:

反射(类加载内存分析)_静态代码块_03

 

 重要理解Class这个类是在什么时候产生的。

 

标签:初始化,反射,System,内存,println,加载,out
From: https://blog.51cto.com/u_15810109/5718743

相关文章

  • java类加载器?
    Java类加载器ClassLoader总结JAVA类装载方式,有两种:1.隐式装载,程序在运行过程中当碰到通过new等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。2.显式装载,通过cla......
  • 惊!ThreadLocal你怎么动不动就内存泄漏?
    “今天无聊带大家分析下ThreadLocal为什么会内存泄漏~前言使用ThreadLocal不当可能会导致内存泄露,是什么原因导致的内存泄漏呢?正文我们首先看一个例子,代码如下:pub......
  • TE中的一种矢量图层加载方式
        在TE中加载的矢量图层,数据量过大的情况下,流方式数据显示的速度会比较慢,使用层方式加载,系统的资源占的比较多。    这里介绍一种矢量图层的加载方式,这种......
  • TE二次开发批量加载发布3dml模型
        在TE的二次开发过程中,把3dml模型用sfs或者sgs发布完成后,如何获取到sfs或者sgs上发布的模型列表,使用一定的规则对模型进行加载,灵活的控制模型图层。   下边......
  • TE二次开发加载wmts
    TE中可以通过网络服务加载地图,常用的服务有wms,wmts等,WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案。WMTS弥补了WMS不能提供分块地图的不足。WMS针对......
  • 驱动开发:内核CR3切换读写内存
    首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操作......
  • Java多线程内存读写 —— 内存屏障的理解
    在现代计算机中,CPU往往都是多核的,而由于每个CPUCore中都有自己的高速缓存Cache,因此就会造成内存数据读写的不一致性,表现为 ​​指令乱序​​​ 与 ​​不可见性​​​ ......
  • 【elk】es限制内存
    https://www.jianshu.com/p/aa450daecec0  找到ES的安装目录,然后找到config文件夹,里面都是相关的配置文件。  其中,jvm.options可以修改es运行时候的内......
  • 4G内存可以用来做什么
    https://zhidao.baidu.com/question/1894866553066998500.html如果主要用于一般的文档编辑、网页浏览和音频、视频播放,4G内存基本能够满足。而如果电脑主要用于图片处理、......
  • 内存回收、流程控制和循环
    垃圾回收机制"""有一些语言内存空间的申请和释放都需要程序员自己写代码才可以完成但是python却不需要通过垃圾回收机制自动管理"""1.引用计数name='jason'......