首页 > 系统相关 >JVM内存模型和类加载

JVM内存模型和类加载

时间:2023-07-15 15:33:54浏览次数:36  
标签:常量 虚拟机 内存 JVM 方法 加载

内存模型

JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。

堆中包含了字符串常量池。

程序计数器

记录线程执行的字节码的地址。

方法区

存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池(存放编译生成的字面量和符号引用)。
当类加载到内存后,JVM把类文件常量池中的内容存到运行时常量池。

虚拟机栈

管理Java函数的调用,线程私有的内存空间,保存方法的局部变量和返回地址等。

本地方法栈

管理C语言实现的本地方法的调用。

类加载

ClassLoader负责把编译器生成的class字节码文件加载到JVM中执行。

当加载Hello.class时,不考虑自定义类加载器,先按蓝色箭头向上,直到顶点后按红色箭头向下,如果没有任何加载器能加载则抛出ClassNotFoundException。
这种设计的好处:当有人篡改了String.java的实现,系统级别的类之前已经被BootstrapClassLoader加载过了,其他类加载器没有机会再去加载,防止危险代码的植入。

标签:常量,虚拟机,内存,JVM,方法,加载
From: https://www.cnblogs.com/WJQ2017/p/17556190.html

相关文章

  • JVM垃圾收集
    默认垃圾收集器JDK1.7和JDK1.8默认垃圾收集器都是ParallelScavenge(新生代)+ParallelOld(老年代)JDK1.9默认垃圾收集器G1查看命令:java-XX:+PrintCommandLineFlags-versionG1JDK1.7推出的垃圾收集器,特点如下:1使用多核CPU来缩短Stop-The-World停顿的时间2分代收集3基于标记-......
  • VS2015 C++代码内存泄漏
    在可能泄漏的文件头部加入下面几行(保证malloc和new的泄漏都可以检测到)#define_CRTDBG_MAP_ALLOC#include<crtdbg.h>#ifdef_DEBUG//重载new运算符#definenewnew(_NORMAL_BLOCK,__FILE__,__LINE__)#endif程序运行起始位置:_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_C......
  • JVM系统优化实践(18):GC生产环境案例(一)
    生产环境中,最常见的一种案例就是OOM,也叫「内存溢出」,它表示JVM已经无法支撑业务系统的运行。而很多工程师都没有类似处理线上系统故障的经验,尤其是这种突发的故障。那么:1、为什么会OOM?(Why)2、发生什么样的OOM?(What)3、那个系统发生的OOM?(Who/Where)4、什么时候发生的OOM?(When)5、怎么排查......
  • 67.requireJS的核心原理是什么(如何动态加载的如何避免多次加载的如何缓存的)
    67.requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何缓存的?)require.js的核心原理是通过动态创建script脚本来异步引入模块,然后对每个脚本的load事件进行监听,如果每个脚本都加载完成了,再调用回调函数。详细资料可以参考:《requireJS的用法和原理分析》......
  • 81.哪些操作会造成内存泄漏
    81.哪些操作会造成内存泄漏?相关知识点:1.意外的全局变量2.被遗忘的计时器或回调函数3.脱离DOM的引用4.闭包回答:第一种情况是我们由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收。第二种情况是我们设置了setInterval定时器,而......
  • PS安装插件提示无法加载扩展未正确签署 的解决办法
    PS安装插件提示无法加载扩展未正确签署解决方式 win系统: 1、打开“运行”窗口(点击电脑左下角“开始”菜单,从打开的菜单中依次点击“所有程序”->“附件”->“运行”来打开“运行”),或者快捷键“win+R”来打开“运行”窗口,打开之后输入"regedit"确定。2、打开如图注册表,找到......
  • 关于Java类加载器的一些理解
    Java中,每个类都可以获得对应自己类的Class对象,这是因为Object类中有publicfinalnativegetClass()方法,Class对象是由类加载器根据类字节码生成的,是反射机制必不可少的部分。类加载器中,主要的方法有protectedClassloadClass(Stringname,booleanresolve)和protectedClassf......
  • python 获取加载模块路径
    方法一:python3-c"importsys;print(sys.path)"效果:方法二:python3importsysprint(sys.path)效果:参考:https://www.zhihu.com/question/603263580?utm_id=0......
  • c语言的内存泄漏问题
    在今天的动态内存分配的学习中,我遇到了内存泄漏问题,自己开辟的空间,自己找不到了,并且系统也无法使用,通过查找资料得到了比较加深的见解。C语言什么是内存泄漏,怎么避免内存泄漏一、内存溢出内存溢出OOM(outofmemory),......
  • jvm注意事项 - 指令集出现this关键字
    首先如果在虚拟机中出现了this关键字,那么在栈帧中调用了非static方法。大家都知道,非static方法是需要一个对象的没这个对象的地址就是这个this,如果局部变量表中就存在这个this了,那么他就一定是个非static方法。如果this存在,则操作的指令集的顺序的下标就为0,其他变量的顺序就从1......