一、UML图
抽空再画
二、可行性验证的示意代码
public class TaskManager { public static void main(String[] args) throws Exception { ClassLoader mycl = MyClassLoader.getAnotherSysClassLoader(); System.out.println("========invoke directly================"); TestBean.main(args); System.out.println("========invoke by myClassLoader========"); Class testBeanClazz = mycl .loadClass("com.alibaba.china.industry.task.common.TaskLoader"); Object obj = testBeanClazz.newInstance(); Method[] ms = testBeanClazz.getMethods(); Method m = getInvokeMethod(mycl, testBeanClazz); if (m == null) { System.out.println("error!"); return; } Object target = obj; if(Modifier.isPublic(m.getModifiers())){ m.invoke(Modifier.isStatic(m.getModifiers())?testBeanClazz:obj, new Object[] { args }); } System.out.println("========invoke directly 2================"); TestBean.main(args); } private static Method getInvokeMethod(ClassLoader cl, Class clazz) throws ClassNotFoundException { Method[] ms = clazz.getMethods(); Method m = null; for (Method method : ms) { Class annClass = cl .loadClass("com.alibaba.china.industry.task.common.InvokeMethod"); if (method.isAnnotationPresent(annClass)) { m = method; } } return m; } private static class MyClassLoader extends URLClassLoader { private static URLClassLoader scl = (URLClassLoader) getSystemClassLoader(); private MyClassLoader() { super(scl.getURLs(), null); } static ClassLoader getAnotherSysClassLoader() { return new MyClassLoader(); } } }
public class TaskLoader { /** * @param args */ @InvokeMethod public static void main(String[] args) { System.out.println("TestBean classLoader:"+TaskLoader.class.getClassLoader()); System.out.println("String classLoader:"+String.class.getClassLoader()); } }
public class Server { private ServerSocket server; private static final int ServerPort = 8765;// 要監控的port public static void main(String[] args){ Server server = new Server(); server.listen(); } public Server() { try { server = new ServerSocket(ServerPort); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void listen() { TaskDirector taskManager = null; Socket socket; java.io.BufferedInputStream in; System.out.println("server is already!"); while (true) { socket = null; try { synchronized (server) { socket = server.accept(); } in = new java.io.BufferedInputStream(socket.getInputStream()); byte[] b = new byte[1024]; String data = ""; in.close(); in = null; socket.close(); taskManager = new TaskDirector(); taskManager.start(); } catch (Exception e) { } } } public static class TaskDirector extends Thread { TaskDirector() { super(); setDaemon(true); } public void run() { try { TaskManager.main(null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
public class Client { private String address = "127.0.0.1";// 連線的ip private int port = 8765;// 連線的port public Client() { Socket client = new Socket(); InetSocketAddress isa = new InetSocketAddress(this.address, this.port); try { client.connect(isa, 10000); BufferedOutputStream out = new BufferedOutputStream(client .getOutputStream()); // 送出字串 out.write("Send From Client ".getBytes()); out.flush(); out.close(); out = null; client.close(); client = null; } catch (java.io.IOException e) { System.out.println("Socket連線有問題 !"); System.out.println("IOException :" + e.toString()); } } /** * @param args */ public static void main(String[] args) { new Client(); } }
相关推荐
在热加载场景下,JarinJAR使得在运行时能够动态替换内部的JAR,达到更新代码的目的。然而,JarinJAR并不直接支持热加载,需要配合类加载器的定制工作。 **动态编译**:在热加载过程中,可能会涉及到对源代码的动态...
动态加载jar包是一种在程序运行时按需引入外部库或者组件的技术,这使得应用程序更加灵活,可以适应不同的环境和需求。这种技术广泛应用于插件系统、框架开发以及服务升级等场景,因为它允许程序在不重启的情况下...
总的来说,MyEclipse热加载jar包是提升Java开发效率的一个利器,特别是对于需要频繁调试和修改代码的项目。通过理解和正确配置这个资源,开发者可以节省大量时间,更加专注于代码的编写和优化,而不必反复进行繁琐的...
jvm堆内存溢出jar包代码
`URLClassLoader`会读取这个JAR文件,并将其包含的类加载到当前运行的Java虚拟机(JVM)中。 在代码中,首先创建了一个`URL`对象,表示JAR文件的路径。接着,通过`URLClassLoader`的构造函数,传入URL数组来实例化...
本文将深入探讨Java的JVM如何实践对JAR包的代码签名。 代码签名是一种验证软件来源可靠性的方法,它通过数字签名技术为JAR文件提供了一种认证机制。在Java中,我们可以使用Java自带的工具如`jarsigner`来完成这个...
2. OSGi(Open Service Gateway Initiative)框架:OSGi提供了模块化系统,允许在同一JVM中动态加载和卸载不同的jar包版本,实现类的隔离。 3. Spring Boot的ClassPathScanningCandidateComponentProvider:Spring ...
在Java编程语言中,动态加载jar包是一种常见的需求,它允许程序在运行时根据需要加载新的功能或更新现有的模块,增强了软件的灵活性和可扩展性。动态加载jar包技术主要涉及Java的反射机制、类加载器和插件系统。下面...
kotlinx-coroutines-io-jvm-0.1.1.jar
JavaRebel是一款强大的JVM热加载插件,它极大地提升了Java开发者的生产力,尤其是在进行Web应用编程时。这款工具允许开发者在代码修改后立即看到结果,而无需重新启动服务器或重新部署应用程序。这一特性显著减少了...
在Java编程环境中,动态加载jar包是一项重要的技术,它允许我们无需重启服务器就能引入新的功能或更新已有的类。这在大型系统维护和迭代中尤为关键,因为它提高了系统的灵活性和可扩展性。以下是对"动态加载jar包的...
标题 "C++调用java jar包测试代码" 描述了一个跨语言交互的场景,其中C++程序通过调用Java编译后的jar包来执行特定功能。这个过程涉及到多个技术点,包括Java的编译和打包,C++的编程以及两者之间的接口调用。 1. *...
xgboost jvm-package jar包xgboost jvm-package jar包
* 使用不同的类加载器:在 WebSphere 中,我们可以使用不同的类加载器来加载不同的 jar 包。例如,我们可以使用 WebSphere Extensions Class loader 来加载 WebSphere 的一些 runtime 类,而使用 Application Module...
赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...
在Java编程中,动态加载JAR或ZIP包是一项重要的技术,它允许程序在运行时根据需求加载外部库,而不是在编译时静态地链接。这种技术对于实现插件化、模块化系统,或者处理频繁更新的组件非常有用。下面将详细讲解如何...
每个类文件(.class)包含了Java源代码编译后的字节码,这些字节码是Java虚拟机(JVM)执行的基础。当比较两个JAR包时,主要关注的是类文件的变化,因为这是直接影响程序行为的部分。 "jar包差异比较器"的使用方式...
2. **优化加载速度**:由于JAR文件是压缩的,因此它们在被Java虚拟机(JVM)加载时可以更快地提取和解压,提高了程序的启动效率。 3. **版本控制**:不同的JAR包可以代表不同版本的库,这有助于管理项目依赖和版本...
Bootstrap ClassLoader负责加载JRE核心库(如rt.jar),Extension ClassLoader负责加载JRE扩展目录下的JAR包,而App ClassLoader则加载应用程序的CLASSPATH中的类和JAR包。 当JVM需要加载一个类时,它会委托给合适...
根类加载器,也称为bootstrap class loader,是JVM内置的最基础的类加载器,由C++实现,负责加载JDK核心库,如rt.jar,这些库位于JRE的lib目录下,包含了Java的基础类和API。 扩展类加载器,又叫extension class ...