Tag: jvm

多重inheritance和类对象

我对OOP很新。 我们都知道Java不支持多重inheritance; 但是,所有Java类都inheritance自Object ,并且还可以从另一个类inheritance。 我们可以将其视为多重inheritance吗? Java如何处理这样的事情?

如何确保不会发生jvm和编译器优化

我有这个代码测试Calendar.getInstance().getTimeInMillis() vs System.currentTimeMilli() : long before = getTimeInMilli(); for (int i = 0; i < TIMES_TO_ITERATE; i++) { long before1 = getTimeInMilli(); doSomeReallyHardWork(); long after1 = getTimeInMilli(); } long after = getTimeInMilli(); System.out.println(getClass().getSimpleName() + " total is " + (after – before)); 我想确保没有JVM或编译器优化发生,因此测试将是有效的,并且实际上会显示差异。 怎么样? 编辑 :我改变了代码示例,以便更清楚。 我在这里检查的是在不同的实现中调用getTimeInMilli()需要多长时间 – Calendar vs System。

合成方法的惩罚是什么?

在Eclipse下开发Java应用程序时,我收到了关于“通过合成方法访问的方法/值”的警告。 解决方案只是将私有访问修饰符更改为默认级别。 这让我想知道:使用合成方法的惩罚是什么? 有一些? 我假设编译器/ Eclipse会引发警告,但它是如此相关的东西还是可以安全忽略的东西? 我没有在这里看到这些信息,所以我问。

因为类加载器而导致ClassCastException?

在使用类加载器时,我遇到以下exception: Exception in thread “main” java.lang.ClassCastException: xxx.Singleton cannot be cast to xxx.Singleton 这是否意味着类加载器中的实例不能转换为另一个类加载器的类? 检查我的代码,我可以通过类加载器实现3个单例,即使是“”安全性。 public static void main(String[] args) throws Exception { URL basePath = new URL(“file:/myMavenPath/target/classes/”); Object instance = getClassInstance(Singleton.class); System.out.println(instance); // Object instance2 = getClassInstance( new URLClassLoader( new URL[]{basePath} , null ) .loadClass(“my.Singleton”) ); System.out.println(instance2); // Object instance3 = getClassInstance( new URLClassLoader( new […]

Args保证不为空?

在以下程序中,如果执行此操作(例如,通过命令行),args JVM是否独立保证不为空? public class test { public static void main(String[] args) { } }

尝试用资源引入无法访问的字节码

javac是否有可能为以下过程生成无法访问的字节码? public void ex06(String name) throws Exception { File config = new File(name); try (FileOutputStream fos = new FileOutputStream(config); PrintWriter writer = new PrintWriter(new OutputStreamWriter( fos , “rw”))) { bar(); } } 当我查看字节码的exception表(javap -v)时,有以下条目看起来很奇怪: 43 48 86 Class java/lang/Throwable 43 48 95 any 和 21 135 170 Class java/lang/Throwable 21 135 179 any 现在的问题是,如果捕获了类型为“any”而不是Throwable的exception,则只能访问某些代码。 是否有任何可能发生这种情况的情况? […]

鼓励JVM加入GC而不是增加堆?

(注意,当我说“JVM”时,我的意思是“Hotspot”,我正在运行最新的Java 1.6更新。) 示例情况: 我的JVM在-Xmx设置为1gb的情况下运行。 目前,堆已经分配了500mb,其中使用了450mb。 该程序需要在堆上加载另外200 MB。 目前,堆中有300mb的“可收集”垃圾(我们假设它们都是最老的一代)。 在正常操作下,JVM会将堆增长到700 MB左右,并在它到达时进行垃圾收集。 在这种情况下我想要的是JVM首先gc,然后分配新的东西,这样我们最终得到的堆大小保持在500mb,而使用的堆在350mb。 是否有JVM参数组合可以做到这一点?

如何选择jvm堆大小?

我通常对jvm堆大小做的是将max值设置得非常高,以避免臭名昭着的OutOfMemoryException。 然而,这种策略(或缺乏策略)似乎并不是很聪明。 :-)。 我的问题是如何选择最小值和最大值,以及两者之间的差异(最大值应该是小还是大?)。 例如,从这里 : 如果初始堆太小,Java应用程序启动变慢,因为JVM被迫频繁执行垃圾收集,直到堆增长到更合理的大小。 为获得最佳启动性能,应将初始堆大小设置为与最大堆大小相同。 谢谢。

有没有办法让ClassLoader加载哪些类?

我正在尝试为旧框架实现一些unit testing。 我试图模拟出数据库层。 不幸的是,我们的框架有点陈旧,并没有完全采用最佳实践,因此没有明确的关注点分离。 我有点担心尝试模拟数据库层可能会使JVM加载大量甚至无法使用的类。 我不太了解类加载器,所以这可能不是问题。 有没有办法在特定的ClassLoader加载的所有类中达到峰值,以certificate引擎盖下发生了什么?

java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET

我试图运行一个java程序,我得到以下运行时错误。错误如下所示。 Exception in thread “main” java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175) at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158) at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309) at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466) at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:286) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) at net.floodlightcontroller.core.internal.PacketStreamerClient.registerForPackets(PacketStreamerClient.java:90) at net.floodlightcontroller.core.internal.PacketStreamerClient.main(PacketStreamerClient.java:51) 现在我添加到类路径的文件如下。 export CLASSPATH=$(JARS=(./lib/*.jar); IFS=:; echo “${JARS[*]}”) export CLASSPATH=$CLASSPATH:~/.m2/repository/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar export CLASSPATH=$CLASSPATH:~/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar export CLASSPATH=$CLASSPATH:~/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar export CLASSPAHT=$CLASSPATH:~/ms_thesis/ONOS/httpcore-4.1.jar #export CLASSPATH=$CLASSPATH:~/ms_thesis/ONOS/lib/httpclient-4.2.jar export CLASSPATH=$CLASSPATH:~/google-gson-2.2.4/gson-2.2.4.jar “main”java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET的原因是什么 我下载了http-core-4.1-alpha因为它是包含来自findjar.com的org/apache/http/params/SyncBasicHttpParams class的jar。 那个版本的http-core是不可协商的。如何找到与该版本的http-core兼容的httpclient版本?