标签: classloader

如何通过电线发送课程

我有以下问题:我想通过线路发送一个类型(java.lang.Class)并在另一侧'定义'类.

我试过这样的:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

在接收端:

ByteArrayInputStream bis = new ByteArrayInputStream(request.getBytes());
ObjectInputStream ois = new ObjectInputStream(bis);
Class c = (Class) ois.readObject(); // ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)

所以显然我需要发送类的原始字节码并做一个

ClassLoader.defineClass(bytes, ..
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我没有看到如何检索已加载类的bytcode.我正在寻找类似的东西:

byte[] byteCode = MyClass.class.toByteArray();
Run Code Online (Sandbox Code Playgroud)

这甚至可以使用标准JDK,还是有任何小型lib可以做到这一点?

java serialization classloader

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

java类驻留在内存中的时间

我正在考虑一个类驻留在内存中的多少,以防内存中的其他对象没有访问它?

例如,假设我有一些这样的类:

public class OrderNumber {
 private static long counter = 0;

 public static long getOrderNumber(){
          if (counter >= 100) {
            return counter = 1;
          }
          return ++counter;
 }
}
Run Code Online (Sandbox Code Playgroud)

我从另一个类调用它的静态方法:

long number = OrderNumber.getOrderNumber(); 
Run Code Online (Sandbox Code Playgroud)

每次我调用它,它都会返回一个增量数字,1,2,3,4 ......

所以,我的问题是这个方法返回初始值的概率是多少,它应该返回序列值?

java classloader

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

Java中的类加载与对象创建

我对将内存分配给Java程序的时间感到非常困惑.加载类时它是"部分完成的"吗?我已经阅读了类生命周期来加载 - >链接 - >初始化 - >卸载.即使我们不创建该类的对象,也不会在这些进程中消耗一些内存吗?

我也很想知道在类加载或对象创建过程中是否完成了初始化步骤?

非常感谢 !

java object classloader

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

在Codeigniter的库中加载视图页面

在我的代码编辑器中,我在库文件夹中创建了一个库。我想在该库中加载视图页面。我该怎么做?

这是我的代码:

$this->load->view('view_page');
Run Code Online (Sandbox Code Playgroud)

但是当我使用此代码时,我得到一个错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: CI_theme_lib::$load

Filename: libraries/theme_lib.php

Line Number: 9
Run Code Online (Sandbox Code Playgroud)

mycode中有什么问题?

在库中的第9行中,代码为:

$this->load->view('view_page');
Run Code Online (Sandbox Code Playgroud)

php codeigniter classloader codeigniter-2

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

如何执行已上传的类的方法?

目标是实现可以执行.class已上载文件的方法的Web应用程序.上传的类文件可用作byte[].此.class文件中的公共类实现特定接口.
上传后,我想调用一个方法(接口实现).

有没有办法在运行的java应用程序中这样做?如果有,怎么样?

顺便说一句.我知道安全风险.

java reflection classloader

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

使用类加载器在java程序中运行可执行jar文件

我听说你可以使用Process或使用ClassLoaders运行其他java文件.

我有一个可执行jar'test.jar',主叫类叫Test.

我找到了一种使用Process运行的方法.我需要知道如何使用ClassLoaders.

Process p = Runtime.getRuntime().exec("java -jar test.jar");
BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
synchronized (p) {
   p.waitFor();
}
int b=0;
while((b=bis.read()) >0){
   System.out.print((char)b);    
}
Run Code Online (Sandbox Code Playgroud)

java jar executable-jar classloader

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

关于进口声明

我想知道在哪里可以检查类加载器已加载了多少个类.我想知道,import带有*标记的类中的语句是否会在堆的perm区域中加载那么多类?或者只有当我们声明特定类型的引用时才会加载以下两个类?
防爆.

Map m = new HashMap(); //only these two classes loaded???
Run Code Online (Sandbox Code Playgroud)

如果我们写import语句怎么样?

java.util.*;
Run Code Online (Sandbox Code Playgroud)

类加载器会加载java.util包下的所有类吗?在java中有任何类卸载过程吗?

java import heap-memory classloader

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

如何检查android设备是否支持库?

我创建了一个带有IR Blaster的Android应用程序,我希望我的代码能够检查Android设备是否支持这些库.当另一台设备安装我的应用程序时,它会崩溃.我怎么能避免这个?

我希望我的代码能够获取有关手机是否支持我的应用的信息.

java android classloader

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

Android Multidex列出所有类

我想使用ApplicationWrapepr方法在我的应用程序中使用multidex,如此处所述https://plus.google.com/104023661970539138053/posts/YTMf8ADTcFg

我使用了--minimal-main-dex选项以及这样的keep文件:

android/support/multidex/ZipUtil.class
android/support/multidex/ZipUtil$CentralDirectory.class
android/support/multidex/MultiDex$V14.class
android/support/multidex/MultiDexExtractor$1.class
android/support/multidex/MultiDexExtractor.class
com/<mypackage>/common/MyApplication.class
com/<mypackage>/common/MyApplicationWrapper.class
com/<mypackage>/common/ui/DashboardActivity.class
android/support/multidex/MultiDexApplication.class
android/support/multidex/MultiDex.class
android/support/multidex/MultiDex$V19.class
android/support/multidex/MultiDex$V4.class
Run Code Online (Sandbox Code Playgroud)

这导致我的主dex文件中列出的类是可以的.我使用一个使用以下代码的库来列出dexfile中的所有类,但只获取主"clesses.dex"的条目,而不是所有其他加载的dex文件的条目,因为新的DexFile只检查"classes.dex" :

private static List<String> getPaths(final String[] sourcePaths) {
    List<String> result = new ArrayList<String>();

    for (String s : sourcePaths) {
      try {
        DexFile dexfile = new DexFile(s);
        Enumeration<String> entries = dexfile.entries();

        while (entries.hasMoreElements()) {
          result.add(entries.nextElement());
        }
      } catch (IOException ioe) {
        Log.w(TAG, "cannot open file=" + s + ";Exception=" + ioe.getMessage());
      }
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

现在的单一路径通过以下方式确定:

application.getApplicationContext().getApplicationInfo().sourceDir;
Run Code Online (Sandbox Code Playgroud)

结果像/data/../myapplicationname.apk

还有另一种可能性来列出dex文件中的所有类吗?或者目前在ClassLoaders中的所有课程?该库对项目至关重要,并使用此方法稍后通过反射查找组件实现.

EDIT1: 如果发现classes2.dex文件位于:/data/data/com./code_cache/secondary-dexes/com.-1.apk.classes2.dex

但是当使用带有此路径的新DexFile()时,将抛出IOEsxception,并显示消息"无法打开dexfile".

android classloader dex dexclassloader android-multidex

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

Android静态参考是否强大

我有一个单身人士,我希望在一生中保持活力Application.

public final class KeepAlive extends Whatever {
    private KeepAlive() {}

    private static class Singleton {
        private static final KeepAlive instance = new KeepAlive();
    }
}
Run Code Online (Sandbox Code Playgroud)

Singleton.instance认为是一个强有力的参考,所以它不会得到GC?

更新: Android是否使用自定义类加载器?是这样的,它会永远卸一类像KeepAliveSingleton

java singleton android reference classloader

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