jvm分析

jvm分析:

一个java类在jvm中有三种形态:
1) source:源码形态  ->编译过程(javac)
2) class:字节码形态
3)runtime:运行时形态    加载到内存,内存存在形态

jvm中最核心的一个类就是ClassLoader,从分析源码发现该类在加载类的时候采用的双亲委派机制双亲委派:是JDK的一种安全机制,会检测类是否被加载过,只有没有加载过的才允许加载,父类能加载的就不给子类加载,同一时间、同一个类只允许一个线程加载到内存里一次
该类最核心方法:

protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
        synchronized (getClassLoadingLock(name)) {
            // First, check if the class has already been loaded
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                long t0 = System.nanoTime();
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }

                if (c == null) {
                    // If still not found, then invoke findClass in order
                    // to find the class.
                    long t1 = System.nanoTime();
                    c = findClass(name);

                    // this is the defining class loader; record the stats
                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                    sun.misc.PerfCounter.getFindClasses().increment();
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }
    }


比如:JDK内含java.util.List类  我们自定义一个 java.util.List类,这样的代码能通过编译,但是由于JDK为保护程序运行时安全的安全机制,
不允许我们运行。但是若果我们直接更换JDK内的List类编译后的二进制.class文件是可以执行的,黑客入侵可以通过这种方式。
文件的安全是由操作系统来保护的,JDK只是管理程序的运行时的安全,不关心文件是否被替换。

### IntelliJ IDEA 内置 JVM Profiler 功能介绍 IntelliJ IDEA 2018.3 Beta Ultimate 版本在 Linux 和 macOS 上集成了 JVM Profiler[^1]。此工具允许开发者监控应用程序性能并识别潜在瓶颈。 #### 启动内置 JVM Profiler 为了启动内置的 JVM Profiler,在项目中右键点击要分析的应用程序类或测试用例,选择 "Profile 'ClassName'" 或者通过主菜单 `Run` -> `Profile...` 来打开配置界面。对于已有的运行/调试配置也可以直接在其上下文菜单中找到 Profile 选项。 #### 配置会话设置 当创建新的性能剖析会话时,可以调整多种参数来适应不同的需求: - **CPU Sampling**: 收集团数据以查看哪些方法消耗最多时间。 - **Memory Allocation Tracing**: 跟踪对象分配情况帮助发现内存泄漏等问题。 - **Thread States Monitoring**: 显示线程状态变化图谱辅助理解并发行为模式。 这些选项可以在启动前设定好,并且部分视图支持实时更新以便即时观察应用动态表现。 #### 查看报告与诊断问题 执行完毕后将会自动生成详细的统计图表以及热点函数列表等资源占用概况。用户能够深入探究具体的方法调用链路及时长分布特征从而定位优化方向。 如果遇到无法加载 JVM DLL 文件的情况,则需确认环境变量 JAVA_HOME 是否指向有效的 JDK 安装路径;特别是针对不同操作系统架构(如64位)下的兼容性问题应特别留意[^2]。 ```bash export JAVA_HOME=/path/to/jdk ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值