标签: classloader

Glassfish中已加载类的总数

我有EJB的企业应用程序.该应用程序的总大小为34兆.当我部署我的应用程序时一切都很好但是当我重新部署它时,总加载类的数量增加.我正在使用visualVM查看此信息.它应该是它应该是什么,或者它是一个内存泄漏.如何解决这个问题呢?谢谢

java memory deployment glassfish classloader

2
推荐指数
1
解决办法
2566
查看次数

Web应用程序启动时首先加载哪个类?

我有一个Web应用程序和两个类文件,

第一类是MyClass.class,它位于abc.jar文件(WEB-INF/lib/abc.jar)中,第二类是YourClass.class,它位于classes文件夹(WEB-INF/classes/YourClass.class)中.

我的问题是,当应用程序启动时,哪个类会首先加载?为什么?

java servlets classloader

2
推荐指数
2
解决办法
1176
查看次数

在Jetty-7.1.6.v20100715中获取X509Certificate时抛出ClassCastException

我写的过滤器抛出了ClassCastException

[Ljava.security.cert.X509Certificate; 无法转换为java.security.cert.X509Certificate

当我试图转换从ServletRequest属性中提取的Object时,即

public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws
IOException, ServletException
        {
            X509Certificate cert = (X509Certificate) req.getAttribute("javax.servlet.request.X509Certificate");
            System.out.println("cert dn " + cert.getSubjectDN().toString());
            filterChain.doFilter(req, res);
        }
Run Code Online (Sandbox Code Playgroud)

当我深入挖掘时,我理解像这样的异常很可能是由不同的类加载器引起的,尽管它们属于同一类类型.我该如何解决这个问题?

谢谢

我使用以下Spring 3配置来加载Jetty 7零碎

 <bean class="org.eclipse.jetty.server.Server"
      init-method="start" destroy-method="stop">

    <property name="connectors">
        <list>
            <bean id="SSLConnector" class="org.eclipse.jetty.server.ssl.SslSocketConnector">
                <property name="port" value="8553"/>
                <property name="maxIdleTime" value="3600000"/>
                <property name="soLingerTime" value="-1"/>
                <property name="needClientAuth" value="true"/>
                <property name="sslContext">
                    <ref bean="sslContext"/>
                </property>
            </bean>
        </list>
    </property>

    <property name="handler">
        <bean name="contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
            <property name="handlers">
                <list>
                    <bean class="org.eclipse.jetty.servlet.ServletContextHandler">
                        <property name="contextPath">
                            <value>/caas</value>
                        </property>

                        <property name="resourceBase" …
Run Code Online (Sandbox Code Playgroud)

classloader classcastexception embedded-jetty

2
推荐指数
1
解决办法
2044
查看次数

Java ClassLoader基础知识

我需要一个个人命令行工具,它应该将具体子类的名称作为CL参数,并在运行时实例化正确的Java类:

public class MyCommandLineTool
{
    public static void main(String[] args)
    {
        // Read the name of the desired class to load
        String strClassName = getClassNameFromArgs(args);

        // Now create an instance of that class (if it exists/is valid/etc.)
        Shape oShape = someMagicalClassLoaderCall(strClassName);

        // Now call the subclass's overridden draw() method
        oShape.draw();
    }
}

public abstract class Shape
{
    // Some stuff

    public abstract void draw();
}

public class Circle extends Shape
{
    @Override
    public void draw()
    {
        // etc...
    }
} …
Run Code Online (Sandbox Code Playgroud)

java abstract-class classloader

2
推荐指数
1
解决办法
755
查看次数

从getResource解析webapp的根目录

我的webapp中有这样的文件结构:

webapp/
??? META-INF
??? WEB-INF
    ??? reports
    ?   ??? info.txt
    ??? web.xml

3 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

我需要/WEB-INF/reports/info.txt从这样的课程中获得:

this.getClass().getResource("/WEB-INF/reports/info.txt");
Run Code Online (Sandbox Code Playgroud)

这会解决吗?我将测试它,但我不确定Tomcat的类加载器如何解决问题.如果这不起作用,我该如何获取文件?

java tomcat classloader

2
推荐指数
1
解决办法
1万
查看次数

Java堆中对象的大小与方法有关

我知道生活在堆上的原始对象和对象,但是方法的数量如何影响对象的堆大小?

例如:

public class A {
    int x;
    public getX() { return x; }
}

public class B {
    int x;

    public getX() { return x; }
    public getXString() { return String.valueOf(x); }
    public doMoreInterestingStuff() { return x * 42; }
    //etc
}
Run Code Online (Sandbox Code Playgroud)

实例化时,两个对象都在堆上,两者都有内存分配给它们的原语x,但由于有更多的方法签名,B分配了更多的堆空间?或者只是在permGen空间?在这个例子中它是微不足道的,但是当在任何给定时间内存在100,000多个这些对象时,我想它可能会加起来.

java heap methods classloader

2
推荐指数
1
解决办法
91
查看次数

OSGi的类加载问题

我使用了来自Maven repo的log4j-1.2.17软件包.我尝试在bundle中执行此代码(我的bundle调用log4j-1.2.17包)

    PropertyConfigurator.configure(props());
private static Properties props() {
    Properties props = new Properties();
    props.put("log4j.rootLogger", "INFO, R");
    props.put("log4j.appender.R",
            "org.apache.log4j.DailyRollingFileAppender");
    props.put("log4j.appender.R.File", "logs/IhtikaClient.log");
    props.put("log4j.appender.R.Append", "true");
    props.put("log4j.appender.R.Threshold", "INFO");
    props.put("log4j.appender.R.DatePattern", "'.'yyyy-MM-dd");
    props.put("log4j.appender.R.layout", "org.apache.log4j.PatternLayout");
    props.put("log4j.appender.R.layout.ConversionPattern",
            //"%d{HH:mm:ss,SSS} %c - %m%n");
            //"[%5p] %d{yyyy-MM-dd mm:ss} (%F:%M:%L)%n%m%n%n");
            "[%5p] %d{yyyy-MM-dd mm:ss} %c (%F:%M:%L)%n%m%n");
    return props;
}
Run Code Online (Sandbox Code Playgroud)

但我有错误

log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" object is not assignable to a "org.apache.log4j.Appender" variable. log4j:ERROR The class "org.apache.log4j.Appender" was loaded by log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@9da1dd] whereas object of type log4j:ERROR "org.apache.log4j.DailyRollingFileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@4b222f]. log4j:ERROR Could not instantiate …

osgi log4j classloader apache-felix

2
推荐指数
1
解决办法
8277
查看次数

Scala/Java子目录,名称中带有点

由于某些原因,我需要在我的项目中使用包的长名称.喜欢:

com.example.foo.bar.bazz.anotherlongsubpart.andfinallytheactualpackagname
Run Code Online (Sandbox Code Playgroud)

因此,考虑到名称约定(至少我所知道的Java中的名称约定),我必须创建适当的目录结构,用斜杠替换点:

com/example/foo/bar/bazz/anotherlongsubpart/andfinallytheactualpackagname
Run Code Online (Sandbox Code Playgroud)

至于我,它看起来太丑了:)所以我尝试用斜线替换只有点的部分:

com.example.foo.bar.bazz.anotherlongsubpart/andfinallytheactualpackagname
Run Code Online (Sandbox Code Playgroud)

换句话说,我在这里有一个包名为"com.example.foo.bar.bazz.anotherlongsubpart"的包/目录,另一个包含"andfinallytheactualpackagname".这样做是否合法?我尝试使用Simple Build Tool编译所有这些东西,并在其上运行我的单元测试.它运作良好.正如我用普通的方式用斜线命名.

因此,我的实验表明它至少与SBT一起运作良好.但我不确定这种做法是否会导致进一步的问题?也许在不同类型的类加载器等不同的环境中?

java scala classloader sbt

2
推荐指数
1
解决办法
488
查看次数

在Java中,如何在加载或卸载类时运行静态方法?

我有一个使用静态方法来包装远程API调用的类.

一般来说,我不希望我的API服务器一直"监听"这些调用,而只是在程序使用该类时才监听.所以我需要一种方法告诉服务器在类加载时"唤醒"(我发送"唤醒"消息的方式是无关紧要的).

我知道我可以在调用第一个类方法时唤醒服务器,但是我希望它在类加载到正在运行的程序后立即就绪(即使它是懒惰加载的).

此外,知道何时不再使用该类会很好,所以我可以告诉服务器重新入睡.

基本上,我正在寻找整个班级的"构造者"和"终结者".可以这样做吗?

编辑:我忘了提到一个非常重要的事情,我不能让用户使用公共静态方法或类似的东西手动初始化/完成类.这堂课需要像普通的本地班级一样.

java static jvm classloader

2
推荐指数
1
解决办法
1309
查看次数

struts 1.1中的类加载器漏洞重现过程

在Struts1中,我听说有一个由CVE-2014-0114引起的类加载器漏洞问题.但是我无法在我的项目中重现这一点.任何人都可以帮助我如何重现这个问题.我用Google搜索但没有得到任何复制程序.

我使用struts-1.1,Jboss -4.2.3.GA,Apache 2.2.0,MySql 5.0.37, JKMod, JDK 1.6.0_12, Ant 1.7.0我的web项目.

security jboss classloader struts-1 reproducible-research

2
推荐指数
1
解决办法
1万
查看次数