- 浏览: 3053402 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
嗯,这问题虽然很久以前就知道了,但最近一个功能正好需要让ClassLoader有些灵活性,就又栽在这里了。顺便把这个问题记下来。
Sun的JDK里最重要的两种ClassLoader,sun.misc.Launcher.ExtClassLoader和sun.misc.Launcher.AppClassLoader都是继承了URLClassLoader的(bootstrap ClassLoader并不是Java程序可见的ClassLoader,不算在内;它甚至不继承ClassLoader这个基类,根本不是一个Java object)。别的一些自定义ClassLoader为了实现方便也会继承URLClassLoader,例如GroovyClassLoader。
但就是这么重要的URLClassLoader却一直有一个特性:它一旦打开了它所知的classpath上的文件就会把那些文件全部锁住,直到它被卸载前都不会释放掉。但是ClassLoader什么时候才被释放这就无法预测了,里面引用的JarFile的finalizer什么时候被调用又得看RP,诶……
在Java 7当中URLClassLoader新实现了Closeable接口,添加了一个close()方法,专门用于处理这个问题。在调用了某个URLClassLoader实例上的close()方法后,该实例就无法再用于加载类或资源;原本已经打开的类或资源仍然是可用的。
但在Java 7正式发布之前,要是想修改已经被URLClassLoader打开的JAR包就没好办法了。
Sun的JDK里最重要的两种ClassLoader,sun.misc.Launcher.ExtClassLoader和sun.misc.Launcher.AppClassLoader都是继承了URLClassLoader的(bootstrap ClassLoader并不是Java程序可见的ClassLoader,不算在内;它甚至不继承ClassLoader这个基类,根本不是一个Java object)。别的一些自定义ClassLoader为了实现方便也会继承URLClassLoader,例如GroovyClassLoader。
但就是这么重要的URLClassLoader却一直有一个特性:它一旦打开了它所知的classpath上的文件就会把那些文件全部锁住,直到它被卸载前都不会释放掉。但是ClassLoader什么时候才被释放这就无法预测了,里面引用的JarFile的finalizer什么时候被调用又得看RP,诶……
在Java 7当中URLClassLoader新实现了Closeable接口,添加了一个close()方法,专门用于处理这个问题。在调用了某个URLClassLoader实例上的close()方法后,该实例就无法再用于加载类或资源;原本已经打开的类或资源仍然是可用的。
但在Java 7正式发布之前,要是想修改已经被URLClassLoader打开的JAR包就没好办法了。
发表评论
-
The Prehistory of Java, HotSpot and Train
2014-06-02 08:18 0http://cs.gmu.edu/cne/itcore/vi ... -
MSJVM and Sun 1.0.x/1.1.x
2014-05-20 18:50 0当年的survey paper: http://www.sym ... -
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
class data sharing by Apple
2014-03-28 05:17 0class data sharing is implement ... -
Java 8与静态工具类
2014-03-19 08:43 16298以前要在Java里实现所谓“静态工具类”(static uti ... -
Java 8的default method与method resolution
2014-03-19 02:23 10468先看看下面这个代码例子, interface IFoo { ... -
HotSpot Server VM与Server Class Machine
2014-02-18 13:21 0HotSpot VM历来有Client VM与Server V ... -
Java 8的lambda表达式在OpenJDK8中的实现
2014-02-04 12:08 0三月份JDK8就要发布首发了,现在JDK8 release c ... -
GC stack map与deopt stack map的异同
2014-01-08 09:56 0两者之间不并存在包含关系。它们有交集,但也各自有特别的地方。 ... -
HotSpot Server Compiler与data-flow analysis
2014-01-07 17:41 0http://en.wikipedia.org/wiki/Da ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22410(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
对C语义的for循环的基本代码生成模式
2013-10-19 23:12 21887之前有同学在做龙书(第二版)题目,做到8.4的练习,跟我对答案 ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ... -
oop、klass、handle的关系
2013-07-30 17:34 0oopDesc及其子类的实例 oop : oopDesc* ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ... -
《深入理解Java虚拟机(第二版)》书评
2013-07-08 19:19 0值得推荐的中文Java虚拟机入门书 感谢作者赠与的样书,以下 ... -
豆列:从表到里学习JVM实现
2013-06-13 14:13 48399刚写了个学习JVM用的豆列跟大家分享。 豆列地址:http: ...
相关推荐
如果需要,可以通过类似的方式使用URLClassLoader加载这些源代码或接口文件所在的目录,但这通常不是常规做法,因为通常我们加载的是已经打包好的JAR文件。 总之,使用URLClassLoader加载本地JAR文件是一种灵活的类...
在编程世界中,Java是一种广泛使用的跨平台语言,它的运行依赖于类路径(Classpath),这是一个指示Java虚拟机(JVM)查找.class文件的环境变量。本文将详细讲解如何在Linux和Windows操作系统下动态设置classpath以...
`URLClassLoader`会读取这个JAR文件,并将其包含的类加载到当前运行的Java虚拟机(JVM)中。 在代码中,首先创建了一个`URL`对象,表示JAR文件的路径。接着,通过`URLClassLoader`的构造函数,传入URL数组来实例化...
在Java编程语言中,`URLClassLoader`是Java标准类加载器的一种实现,它负责从指定的URL(统一资源定位符)加载类和资源。本文将深入探讨`URLClassLoader`的工作原理,以及如何处理指定目录和JAR文件中的类加载问题。...
在Java世界中,`URLClassLoader`是一个非常关键的类,它是`ClassLoader`的子类,主要用于从指定的URL(统一资源定位符)加载类和资源。这篇博客文章“URLClassLoader初体验”可能深入探讨了如何使用`URLClassLoader`...
综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它涉及到Spring框架的配置管理、类路径的概念,以及如何在多模块项目中有效地组织和使用配置。正确理解和使用这些技术,能帮助开发者构建可扩展...
这个执行链完成后,`exploit.ErrorBaseExec`类中的`do_exec`方法会在目标机器上被执行,从而实现了远程代码执行。 在实际的安全场景中,这种漏洞可能导致非常严重的后果,因为攻击者可以控制执行的命令。为了防御这...
在Java中,classpath是指Java虚拟机(JVM)在搜索类文件时所遵循的路径。在Java应用程序中,我们可以通过配置classpath来指定要加载的jar包。在传统的开发方式中,我们通常是将需要的jar包添加到项目的classpath中,...
URLClassLoader通过URL集合来定位类的资源,它通常用于加载不在应用类路径(ClassPath)内的额外类库。创建URLClassLoader后,我们需要确保在不再使用时关闭它,以释放与之关联的资源,尤其是文件句柄。 关闭类加载...
在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...
前者会将所有依赖的JAR文件解压并合并到生成的JAR中,后者则将依赖的JAR文件打包进一个独立的目录结构,如`lib`。 对于外部JAR包,如果选择`Package required libraries into generated JAR`,你需要将`lib`目录...
在Java编程语言中,JAR(Java Archive)文件是一种打包格式,用于收集多个类文件、相关的元数据和其他资源(如图像、声音或文本文件),以便一起分发和部署。JAR文件是基于ZIP格式的,因此可以使用类似的机制来读取...
这个任务对于那些希望在不将文件解压到硬盘上的情况下使用它们的开发者来说是非常重要的。本文将详细介绍如何在Java源文件中实现这一功能。 首先,了解JAR文件的基本概念。JAR文件是Java平台的标准归档格式,用于...
Java类加载器是JVM的重要组成部分之一,它负责查找并加载类文件到JVM的内存空间中。Java程序的运行依赖于类加载器将`.class`文件加载到JVM中,并对其进行验证、准备和解析等步骤,最终使类能够在JVM中执行。 #### ...
在Spring Boot项目中,我们通常会将数据库连接信息写入`application.properties`或`application.yml`配置文件中。然而,为了实现动态加载,我们可以使用URLClassLoader,这是一个Java类加载器,它可以加载指定URL...
常见的工具有JD-GUI,它是一个图形界面工具,可以直接打开jar包或class文件,显示源代码视图。 三、JD-GUI的使用 1. 安装与启动:JD-GUI是一个独立的工具,可以从官方网站下载安装。启动后,通过菜单或拖放方式可以...
def classLoader = new URLClassLoader(task.classpath.asFiles.toURLs(), Thread.currentThread().getContextClassLoader()) new ByteBuddy() .redefine(classLoader.loadClass('com.example.MyClass')) // 替换...
5. 文件句柄或网络连接:类加载器可能打开文件或保持网络连接,如果在加载完成后未关闭,也会导致资源泄露。务必在类加载器不再使用时关闭这些资源。 总之,理解ClassLoader的工作原理及其关系对于优化Java应用程序...
5. **关闭资源**:最后,确保在操作完成后关闭所有打开的流,避免资源泄漏: ```java reader.close(); is.close(); jar.close(); ``` 在提供的`TextOperatorJAR.java`源文件中,可能就包含了实现这些步骤的...
Java的`URLClassLoader`可以帮助实现这一目标,因为它允许在运行时动态加载新的类库。 9. **安全性**: JAR文件可以设置数字签名,以验证其来源和完整性,防止恶意篡改。同时,Java的安全模型允许对JAR包内的代码...