Tag: jvm

.java文件中的包私有类 – 为什么它可以访问?

请考虑以下代码,其中HelloWorld类具有默认或包私有访问权限: class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World!”); // Display the string. } } 并假设上面的代码保存在一个名为HelloWorld.java的文件中。 所以我的问题是:因为HelloWorld现在是一个包私有类,它是如何工作的? main()方法不应该在包中可见或可访问,对吗? 如果类HelloWorld被声明为public,那对我来说非常有意义。 仅当使用默认的包 – 私有访问声明它时才会出现混淆。

在Java中为一个Integer对象分配了多少内存? 如何找出任何自定义对象的这个值?

测量堆中的内存应该用于创建某种类型的新对象的正确方法是什么(让我们谈谈Integers以保持简单)? 没有实验可以计算出这个值吗? 那种情况下的规则是什么? 这些规则是在某处严格规定的还是从jvm到jvm不等?

私有方法内联

在Scala 不可变向量代码中有一条注释说: 原则上,大多数成员应该是私人的。 但是,必须谨慎选择访问权限,以防止方法内联 私人对内联决策的影响是什么? 这也适用于Java吗?

创建<100个线程时的Java`OutOfMemoryError`

由于这个错误,我一直在阅读和测试并在墙上撞了一天超过一天。 我在一个名为Listener的类中有一些Java代码,看起来像这样 ExecutorService executor = Executors.newFixedThreadPool(NTHREADS); boolean listening = true; int count = 0; while (listening) { Runnable worker; try { worker = new ServerThread(serverSocket.accept()); // this is line 254 executor.execute(worker); count++; logger.info(“{} threads started”, count); } catch (Exception e1){ //… } } 我一直在调整JVM设置-Xmx (1到15G之间)和-Xss (从104k到512M之间)。 服务器有24 GB的RAM,但还必须运行支持该程序的数据库。 创建2-20个线程后(程序中的其他地方也存在几十个),我收到错误 Exception in thread “Thread-0” java.lang.OutOfMemoryError: unable […]

保存CRUDRepository的方法很慢?

我想在我的neo4j数据库中存储一些数据。 我使用spring-data-neo4j。 我的代码如下: for (int i = 0; i < newRisks.size(); i++) { myRepository.save(newRisks.get(i)); System.out.println("saved " + newRisks.get(i).name); } 我的newRisks-array包含大约60000个对象和60000个边。 每个节点和边都有一个属性。 这个循环的持续时间大约是15-20分钟,这是正常的吗? 我使用Java VisualVM来搜索一些瓶颈,但我的平均CPU使用率为10 – 25%(4个核心),而我的堆不到一半。 有什么选择来推动这项行动吗? 编辑:附加是,在第一次调用myRepository.save(newRisks.get(i)); 在第一个输出到来之前几分钟,jvm下降了fpr 第二次编辑: 类风险: @NodeEntity public class Risk { //… @Indexed public String name; @RelatedTo(type = “CHILD”, direction = Direction.OUTGOING) Set risk = new HashSet(); public void addChild(Risk […]

JVM是否在不再需要时向操作系统提供可用内存?

我有一个应用程序暂时需要一些特定的内存/堆用于某些进程。 给定JVM作为选项的最大堆大小的合理值,JVM从一个小堆开始,并根据需要从OS请求更多内存。 我的问题是,如果我的应用程序不再需要大量内存,那么JVM会向操作系统返回额外的内存(例如,用于其他进程)。 目前我的应用程序似乎永远保留了内存,即使不再需要它。

需要有关Apple OS X的替代JVM的指导

Apple已经弃用了他们的JVM ,在OS X的未来版本中可能不支持它。我不是主要的Java开发人员,但我偶尔会编写Java应用程序,而我使用的主要应用程序使用Tomcat和Opal来提供用C编写的命令行可执行文件的SOAP接口。 我一直在看到简单地使用另一个JVM的建议,但这看起来似乎很荒谬。 在这一点上,我认为在OS X上运行的Oracle JVM纯粹是一种假设。 这似乎是一个合理的解决方案,但考虑到苹果,甲骨文和谷歌似乎处于三方小便中,我担心它可能会推迟一段时间。 我一直指向OpenJDK ,但这似乎需要从源代码构建JVM。 这对我个人来说很好,但对我的最终用户来说并不是那么好。 我还指出了从OpenJDK构建的Soy Latte二进制发行版,但这是一个X11而不是本机实现,似乎需要Java研究许可证。 有人可以指向OS X的其他JVM,或者让我对OpenJDK和SoyLatte的任何误解都不以为然?

Concurrent Mark Sweep(CMS)是否能阻止世界事件?

我看到许多类的卸载,我的整个系统将在这段时间内挂起.. [Unloading class sun.reflect.GeneratedMethodAccessor117] [Unloading class sun.reflect.GeneratedConstructorAccessor1896] [Unloading class sun.reflect.GeneratedSerializationConstructorAccessor485] [Unloading class sun.reflect.GeneratedSerializationConstructorAccessor579] …. // about 1700 of them 同时我没有看到烫发空间的峰值,所以它似乎不是GC事件。 我想知道以下内容 IS Concurrent Mark Sweep收集了一个停止世界事件? 即使烫发空间不满也会发生吗?

为什么lambda转换需要生成静态方法?

Lambda转换是一个两步过程, 一个是 :将lambda放入同一个类中的静态方法中。 public class Main { public static void main(String[] args) { Runnable r = () -> System.out.println(“Hello”); System.out.println(Arrays.asList(Main.class.getDeclaredMethods())); } } [ private static void Main.lambda $ main $ 0() ,public static void Main.main(java.lang.String [])] 二 :生成实现function接口的类。 System.out.println(“A class has been generated: ” + r.getClass()); System.out.println(“That implements a Functional Interface: ” + Arrays.asList(r.getClass().getInterfaces())); 已生成一个类:类Main […]

在链接构造函数时,JVM的隐式内存屏障如何表现?

参考我之前关于不完整构造物体的问题 ,我有第二个问题。 正如Jon Skeet指出的那样,在构造函数的末尾有一个隐含的内存障碍,可以确保所有线程都可以看到final字段。 但是如果构造函数调用另一个构造函数呢? 在每个人的最后是否有这样的记忆障碍,或者只是在第一个被召唤的人的最后? 也就是说,当“错误”解决方案是: public class ThisEscape { public ThisEscape(EventSource source) { source.registerListener( new EventListener() { public void onEvent(Event e) { doSomething(e); } }); } } 正确的一个是工厂方法版本: public class SafeListener { private final EventListener listener; private SafeListener() { listener = new EventListener() { public void onEvent(Event e) { doSomething(e); } } } […]