在泰山项目时曾经解决过jar中类冲突、classes中的类与jar中的类有冲突、发布了代码由于weblgoic或tomcat中缓存的问题而无法看到修改效果……等问题。之前解决的办法是在eclipse中ctr+alt+t在弹出窗口中数据类名查看或者清空中间件缓存,如果所有这些都不行就重新构建工程重新发布并重启中间件并清空自己IE中的缓存等总之是把自己能想到的都用上一遍如果问题解决了就算了,解决不了就傻了!不过还好至今还没傻几次,呵呵。
在了解JVM类加载机制后在官方文档上竟然查到了能打印类加载日志的参数:-verbose:class 在jvm启动参数中加入这个参数即可以在控制台中查看类加载日志了, 控制台看到的日志内容如下:
[Loaded com.isoftstone.agent.FileServerAgent from file:/E:/Workspaces/workspace_ab/agent/WebRoot/WEB-INF/classes/com/isoftstone/agent/FileServerAgent.class]
[Loaded javax.annotation.Resource from C:\Program Files\Java\jdk1.7.0\jre\lib\rt.jar]
通过查看类加载日志,我们就可以知道类是在哪个物理位置加载的了,便于我们确认问题。不过遗憾的是没找到将类加载日志输出到指定文件的地方。 由于V6在weblogic10G以后引入的一些jar包与weblgoic自带的包有冲突有时间去通过类加载器跟踪一下。
参数使用见:java - the Java application launcher(http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html)
-verbose -verbose:class Display information about each class loaded. -verbose:gc Report on each garbage collection event. -verbose:jni Report information about use of native methods and other Java Native Interface activity.
类加载机制了解见博文:IBM网站上的《深入探讨 Java 类加载器》及《WebSphere的类加载机制和故障排查》,《再谈WebSphere的类加载和故障排查》。
分享到:
相关推荐
- **类加载器**:检查类加载器的状态,有时内存泄漏与类加载器有关。 - **大对象**:查找占用大量内存的大对象,它们可能导致老年代快速填满,触发频繁的Full GC。 4. 工具辅助分析: - **Eclipse Memory ...
Java中的类加载器是JVM(Java虚拟机)的核心组件之一,它们负责将.java源代码编译成的.class字节码文件加载到JVM中,从而使得程序能够运行。类加载器不仅涉及到程序的正常执行,还与Java的动态加载、模块化系统以及...
为了帮助开发者调试类加载问题,WebLogic提供了详细的日志和跟踪选项,可以通过修改`weblogic.log.File`和`weblogic.log.Trace`配置来获取更多信息。 通过理解WebLogic的类加载机制,开发者可以更好地管理应用程序...
在Java开发领域,JVM(Java Virtual Machine)是至关重要的组成部分,它负责执行Java程序,并管理内存、类加载、垃圾回收等核心功能。对于Java开发者,尤其是面试阶段,深入理解JVM的工作原理和优化技巧是必不可少的...
1. JMX(Java Management Extensions):提供管理和监控JVM的工具,可以查看运行时的内存、线程、类装载情况等。 2. jstat:命令行工具,用于收集JVM的各种统计信息,如垃圾收集、类装载、内存使用等。 3. ...
而JVM代理(JVM Agent)和类加载器(ClassLoader)则是两个关键的概念,它们对于深入理解Java应用程序的运行机制至关重要。 **JVM代理** JVM代理是一种在JVM启动时或者运行时插入额外功能的方式,它允许开发者在不...
1. 类加载机制:JVM通过类加载器(ClassLoader)来加载.class文件,分为启动类加载器、扩展类加载器和应用程序类加载器。类的加载遵循双亲委派模型,确保类的唯一性。 2. 字节码执行:JVM将字节码转换为机器码,...
当JVM遇到问题,如内存溢出或长时间的垃圾回收,它可能会生成堆栈转储(dump)文件,这些文件包含了JVM在特定时刻的详细状态,包括对象、类加载器、线程、堆和栈信息。"Jvm堆栈dump文件分析"是指通过特定工具对这些...
- JConsole和VisualVM是官方提供的JVM监控工具,可以实时查看和分析内存、线程、类加载等信息。 - 结合`share-jvm`中的代码,尝试通过这些工具进行内存分析和性能监控。 5. **GC(垃圾收集)** - 理解不同的垃圾...
通过查看JVM日志来定位问题原因,如GC日志、异常日志等。 ##### 5.2 工具使用 利用各种工具进行监控和调试,例如VisualVM、JConsole等。 - **VisualVM**:集成了多种功能,如内存分析、线程分析等。 - **JConsole*...
类加载器的隔离作用体现在,JVM判断两个类是否相同时,不仅看类的全名是否一致,还要看定义类加载器是否相同。这意味着不同类加载器加载的同名类在JVM中被视为不同的类,这为实现模块化和版本控制提供了基础。 在...
1. **JVM概述**:介绍Java虚拟机的原理和作用,包括解释器、编译器、垃圾收集器以及类加载机制。 2. **内存模型**:详细讲解JVM内存结构,如堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈...
类装载器是JVM加载类的关键组件,包括启动类装载器、扩展类装载器和系统类装载器。理解类装载器的工作原理有助于理解类的加载、链接和初始化过程,以及自定义类装载器的应用。 3. **JVM配置参数** (3.常用JVM配置...
JVM的启动过程包括类加载、验证、准备、解析和初始化。 二、JVM内存模型 1. 堆(Heap):所有对象都在堆中分配内存,是线程共享的区域,分为新生代和老年代。 2. 新生代(Young Generation):新生代进一步划分为...
- **类加载统计**:查看已加载类的数量、类加载器的使用情况,帮助理解代码的复杂性和资源消耗。 - **类卸载**:检查类是否正常卸载,有时过多的类驻留在内存中会导致内存溢出。 5. **系统资源监控** - **CPU...
3. **Transformer**:当类已经被加载到JVM中时,Transformer可以改变已加载类的字节码,实现对运行时行为的改变。 4. **Hook**:钩子函数是在特定事件发生时调用的回调函数,例如在方法调用前后,异常抛出等。...
4. **异常堆**:在某些情况下,日志会包含异常堆的详细信息,如对象的实例数量、类加载器状态等。这在排查内存泄漏或类加载问题时非常有用。 5. **线程快照**:如果JVM在崩溃时能够生成线程快照,那么我们可以看到...
- `-XX:+TraceClassLoading`:跟踪类加载信息,有助于调试和理解类加载过程。 7. 编译优化: - `-XX:+TieredCompilation`:启用分层编译,提高代码优化的速度。 - `-XX:CompileThreshold`:设定方法触发即时编译...
JVM的类加载机制也值得深入研究。Java采用“双亲委派模型”加载类,即从顶级的启动类加载器开始,逐级向下查找,直到找到目标类。这有助于避免类加载的冲突,保证类加载的一致性。 另外,JVM的内存模型(Java ...
- JConsole和VisualVM:两款常用的JVM性能分析工具,可以查看内存、线程、类加载等信息。 - 参数调整:学习如何通过JVM参数设置内存大小、GC策略、并发级别等,以优化应用性能。 4. **类加载器**: - 自定义类...