java虚拟机的原理

Car c=new Car()
能否解释一下上面代码在内存中是如何分配的?
在JVM栈区当中的一个新生代区里面的一个伊甸园区



java源程序(a.java)->编译成java的二进制字节码(a.class)
(1) Windows下的JAVA字节码解释程序
(2)Linux下的java字节码解释程序
(3)能直接解释java字节码的cpu

class files-> class loader-> | runtime data area (method area,java stack,native method stack ,heap,program counter register)|->execution engine->native-interface -native libraries


一、能否介绍一下JVM 的体系结构:
JVM体系结构:字节码文件-有类加载器加载 ,通过类加载器加载过来之后交给运行时空间(运行时空间里面凤城好多块:首先有一个方法区,2,有一个堆区,3还有一个java栈区,本地方法栈区,PC寄存器)-执行引擎-调用本地接口-libraries资源库

二、能否介绍一下类加载器:应用加载器,根加载器,扩展加载器(Class.forName("com.gao.Hello"))
  
  classload 分为三个类加载器  :1.根加载器(bootstrap)2.(应用加载器 AppClassLoader)
  3.(扩展加载器,ExtClassLoader)
 类加载器 ClassLoader
 负责加载class文件,class文件在文件开头有特定的文件提示,并且CLassLoader只负责class文件的的加载,至于是否可以运行,则有Execution Engine负责

 JVM 中双亲委派机制;
 java中的沙箱模型
 三、JNI(java native interface) 由于java不能直接去访问底层(操作系统),所以要是用JNI去操作或者访问底层,JNI换句话说就是访问java 和操作系统之间的桥梁
 四、栈:存放的都是基本数据类型,和一些引用类型
 
 五、方法区:方法区是线程共享的,通常用来保存状态类的原结构信息。
 eg:运行时常量池,静态变量 常量,字段,方法字节码,在类、实例、接口初始化用到的特殊方法等,
 五、Heap堆
   1.堆体系结构概述
   一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的,类加载器读取了类文件后,需要把类、方法、常量、变量,放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行
 
 堆分为三大区:
 1:新生代区:
 (1):eden区(伊甸园):当一个对象被第一次new出来的时候会放到新生代区的伊甸园区
 (2):S0区(space):幸存区:当伊甸园区的内存满了的话;被new出来的对象就会放到幸存区中;
 (3):S1区 
 
 
 2:老生区(养老区):如果新生代区都放不下的时候再往养老区放
 3:永久区(持久带) jdk1.8 之后改名为元空间
 
 六、堆内存的调优
   1.常用调优参数列表
   主要熟悉的是总存储空间大小、各个区的比例设置,针对不同的区设定不同的回收器和回收算法,在默认情况下有些选项是不打开的,因此需要手动配置,并且根据自己应用的情况选择适当的参数。
   -Xms 设置初始分配大小,默认为物理内存的1/64
   -Xmx 最大分配内存,默认为物理内存的1/4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值