每日一问
未读
【每日一问】说说java虚拟机运行时数据区
Java虚拟机规范规定的运行时数据区分为5个部分。程序计数器是当前线程字节码行号指示器,支撑分支、循环等基础功能;Java虚拟机栈存储局部变量表、操作数栈、动态链接及方法出口等信息;本地方法栈类似虚拟机栈,服务于Native方法;Java堆是最大内存区域,所有线程共享,用于分配对象实例;方法区存储类信息、常量、静态变量及即时编译后的代码等数据。
每日一问
未读
【每日一问】java创建对象的过程
Java创建对象的过程包括五个关键步骤:首先,JVM遇到new指令时进行类加载检查,确保类已加载、解析和初始化;未加载则先执行类加载。其次,分配内存:内存大小在类加载后确定,根据堆内存规整情况选择指针碰撞(用于规整堆,关联Serial/ParNew GC)或空闲列表(用于不规整堆,关联CMS GC)方式。接着,初始化内存为默认值,保证字段在未赋值时可用。然后,设置对象头,记录类实例、hash码、年龄段等基本信息。最后,执行开发人员编写的初始化方法,完成对象创建。整个过程确保对象安全高效地构建。
每日一问
未读
【每日一问】jvm优化原则是什么
JVM优化的核心原则是减少FullGC以最小化Stop-The-World(STW)时间,因为FullGC的STW远长于YoungGC。这通过让对象尽可能在新生代分配和回收实现,避免频繁进入老年代。对象进入老年代有四个条件:1)存活对象达到年龄阈值(默认15,可调);2)大对象直接进入(超过参数设置);3)动态对象年龄判定(Survivor区年龄总和超半时,年龄较大对象进入);4)Young GC后Survivor空间不足。优化建议:避免创建大对象,尤其是朝生夕死的大对象,并确保Survivor区足够大,使YGC后存活对象不超过其一半,从而有效减少FullGC次数和时间。
每日一问
未读
【每日一问】讲一下 JVM 的主要组成部分及其作用?
JVM包含两个子系统和两个组件:两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。
每日一问
未读
【每日一问】Tomcat如果使用默认的双亲委派类加载机制行不行,为什么?
Tomcat作为web容器需解决四个核心问题:不同应用依赖不同版本类库需隔离;相同版本类库可共享以节省资源;容器类库与应用类库隔离确保安全;支持JSP热加载无需重启。默认双亲委派类加载机制无法满足需求,因其仅基于全限定类名加载,无法区分版本冲突,且JSP修改后无法重新加载(类名相同时直接复用)。解决方案是为每个应用或JSP文件使用独立类加载器,实现隔离、共享和动态更新,如卸载并重建JSP加载器以支持热部署。

