问题标签 [classloading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - When is ClassLoader checkPackageAccess method called
I would like to understand when the JVM calls the checkPackageAccess method of a ClassLoader. From the javadoc, I read that it is called by the JVM after loading class with the classloader. But I found out that sometimes it is called more than one time after a loadclass. On what basis does the JVM decide to call it. I would really appreciate it, if someone can clarify the method.
To make it easier to understand, here is what I did:
- I run the same program twice. Both times with -noverify
- In one run I remove the
<clinit>
from the classes, in the other run not.
The run with <clinit>
looks like this:
Run with clinit
The one without like this: Run without clinit
So as you can see the run without clinit leads to three calls to checkPackageAccess
after java.sql.DriverPropertyInfo
was loaded while the normal run (with clinit) only leads to one. Since in both runs the <clinit>
(neither the original one, not the empty one in the second run) is not yet exeuted I wonder what leads the JVM to perform this checkPackageAccess
call.
- First
checkPackageAccess
is forjava.sql.DriverPropertyInfo
(in
both runs) - Second one is for
java.util.concurrent.ConcurrentHashMap
- Third one is for
java.lang.ref.ReferenceQueue
I use JVMTI methodEntry and methodExit events to generate a trace of everything that is happening. Nevertheless I can't explain what leads to those additional checkPackageAccess
calls.
path - 如何找出容器提供了哪些类/路径?
我正在使用 WildFly 10.1,需要添加几个模块。当然,它们有自己的依赖项,我需要在module.xml
. 据我所知,容器本身已经提供了一些类(例如 class javax/xml/ws/Service
),并且为了向这个系统库添加依赖项,我曾经将以下内容放入module.xml
:
同时,我这样做只是因为我知道这一点。
但是,如果我不确定这个特定类是否由容器/JDK 提供时,我将来会在某个地方遇到这种情况怎么办?如何找到可以从当前容器(系统)/JDK 导出的类/路径的完整列表?
我浏览了许多专门用于 WildFly 中的类加载的文章和文档,其中大多数只是声明您可以做到这些system export="true"
,但无法找到任何关于此类问题的答案的提示。
谢谢!
java - sun.misc.Launcher$AppClassLoader.loadClass为什么会出现在堆栈中
我已经检测了 JDK 和应用程序。为调用图构造记录入口和出口点。
调用图看起来像
sun.misc.Launcher$AppClassLoader.loadClass->com.example.Main.main
->sun.misc.Launcher$AppClassLoader.loadClass->com.example.Foo.foo
源代码
这一定是类加载器的工作方式,但我没有在字节码中看到任何表明调用站点“sun.misc.Launcher$AppClassLoader.loadClass”的内容。那么,类加载器在内部是如何工作的呢?
byte-buddy - 当目标应用程序从 uRLConnection.getInputStream 加载类时如何附加 bytebuddy 代理
我用 bytebuddy 做了一个 java 代理。在目标应用程序加载类形成 uRLConnection.getInputStream 之前,它运行良好。目标应用程序在没有附加代理的情况下运行良好,但在附加代理时显示异常 [java.lang.ClassNotFoundException]。这是应用程序的类加载行。
在应用程序中,类在运行时以字节数组的形式从 uRLConnection.getInputStream 提供,应用程序在运行时加载这些类。eclipst 堆栈跟踪:
我的代理是:
我也试过
但是好像没有绑定。
byte-buddy - 如何将 bytebuddy 代理附加到动态类,尤其是从签名的 jar 文件加载动态类时
我尝试将 bytebuddy 代理附加到旧的小程序。在某些运行时阶段,旧的小程序从另一台主机接收签名的 jar 文件并动态加载它们。问题是代理在那个动态加载阶段不起作用。我认为在这种情况下,Rafael Winterhalter 告诉了这一点with(ProtectionDomain)
并且AgentBuilder.Transformer.ForAdvice
只是解决方案。但是如何应用它们呢?我尽我所能,一无所获。网络上没有用例。任何人都可以帮助我。预先感谢。
java - 为什么 ExecutorService 从类加载器线程启动时不处理提交的任务?
我有一个类Singleton
(为这个例子简化)
Class.forName
我想通过调用一个单独的线程来预初始化:
这个构造永远不会从ExecutorService.awaitTermination
.
如果我通过注释(并注释掉另一个)切换到标记为“工作替代”的代码并注释掉代码中的static
块,则按Singleton
预期执行(method1
并method2
根据输出以相反的顺序调用和返回)。
由于“工作替代方案”可以防止问题并且我可以忍受它,我正在寻找这种行为的解释。
我的意图是使用Class.forName
而不是Singleton.init
能够添加更多静态初始化任务,Singleton
而无需考虑它们是否被预初始化例程覆盖。我同意整个设置并不理想。
web - java.lang.NoClassDefFoundError: com.twilio.Twilio
出于某种原因,Twilio SMS 仅在公共静态 void 主函数中工作,如此处所示。当我尝试将它移动到此处显示的 JSF 环境时,它给了我一个错误消息“NoClassDefFoundError”,这意味着在类路径中找不到该类。奇怪的是,工作和不工作的 twilio 都在同一个项目中,这让我感到困惑。我不确定如何解决它。
工作代码
有错误的代码
错误信息
我使用 Glassfish 作为我的服务器和 IntelliJ 只是为了获取更多信息
java - 如果 @Configuration 类包含不可解析的类引用,Spring 如何调用 @Bean 方法
Spring 可以使用s解析@Configuration
类ClassReader
假设我们有以下场景
我们有一个具有多个@Bean
定义的自动配置类
其中一个@Bean
具有所有条件,而第二个@Bean
具有@ConditionalOnClass
并且该类不存在于类路径中
在这种情况下,我有几个问题
- Spring Boot AutoConfiguration 是否将第一个 bean 注册到
ApplicationContext
? - 如果 (1) 为真,我在第一个
@Bean
方法中的断点是否会在调试期间被命中 - 如果 (2) 为真,
*AutoConfiguration
该类如何加载到 JVM 中,因为该类将引用其他类(来自第二个 @Bean),这些类在类加载时无法解析 - 如果 (2) 为假,spring 是否在运行时仅使用第一个
@Bean
方法生成一个类并调用该方法?
谢谢
java - 从类路径外的文件夹加载类时如何修复“ClassNotFoundError”
我正在编写一个模块系统,它将具有附加功能的模块加载到我的 Spigot 插件中。当我尝试从我的模块动态加载一个类时,我得到一个 ClassNotFoundException。
我正在使用类加载器来加载模块的 jar 文件,这些模块存储在一个单独的文件夹中,也称为“模块”。我已经寻找了几个关于类加载器的教程,据我所知,我在这段代码中没有做错任何事情。
这是我的代码:
我很确定这门课应该在那里。该代码能够加载文件名,它需要获取类路径。正如您在 LiberEffects.jar 的文件结构中看到的那样,它还包含一个名为 LiberEffects 的类。我已将此 jar 文件放在模块文件夹中,但是当它尝试加载 net.libercraft.libereffects.LiberEffects 类时会引发错误。
javascript - 如何从 ES6 JavaScript 类实例中获取源代码位置?
我想从我的对象树中生成一些代码。为了生成所需的导入语句,我需要从类实例中找出给定类的源代码位置。
我已经能够获得预期的MyClass
名称
但不是源代码位置
=> 怎么做?
对于 Java,它会像这里描述的那样工作:
如果我使用 dir(constructor) 检查 Chrome 开发人员工具中的构造函数,我可以看到一些属性
如果我将鼠标悬停在它上面,我可以看到想要的路径。如何以编程方式获取该属性?
编辑
刚刚发现 [[FunctionLocation]] 不可访问: