草庐IT

java - 为什么必须将main方法声明为public...为什么JVM不能执行private main方法

通常我在各种书籍中发现main方法应该是公共(public)的,因为它应该对类加载器可见。但是JVM执行(或提供特殊处理)各种私有(private)方法,例如ObjectOutputStream中的readObject/writeObject方法。 最佳答案 很明显,您的程序的入口点应该是可见的。 关于java-为什么必须将main方法声明为public...为什么JVM不能执行privatemain方法,我们在StackOverflow上找到一个类似的问题:

jvm堆外内存排查详解

文章目录前言一、堆外内存排查1.背景2.内存对比3.堆外内存检查4.排查堆外内存5.glibc内存泄露结尾前言内存泄漏想必大家并不陌生,对于jvm的内存泄漏,有很多排查手段和方便的排查工具,例如MAL,但是对于非jvm的内存,如直接内存的使用,排查起来较为麻烦,下面介绍一下相关的排查手段一、堆外内存排查1.背景在一次内存检查的过程中,意外发现在linux的java进程内存占用,远高于jvm的内存设定最大值(堆+非堆),第一时间是考虑java可以采用直接内存,如mmap对内存进行使用,但经过排查,发现并非如此,下面看一下排查过程2.内存对比首先通过top,可以看到java进行使用了4.2g的内存

java - 有没有办法告诉 JVM 当前正在使用哪种 GC 算法

我正在使用Java5,我们的自定义服务器应用程序需要GC调整,因为有时我们会在高峰时段遇到15-20秒的暂停。我们在服务器类机器上运行Java5,其JVM参数如-server-d64有没有办法知道JVM当前使用的是哪种GC算法?http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html在运行服务器VM的服务器级机器上,垃圾收集器(GC)已从以前的串行收集器(-XX:+UseSerialGC)更改为并行收集器(-XX:+UseParallelGC).您可以通过对java命令使用-XX:+UseSerialGC命

java - 是否可以从不同的 JVM 调用 Java 应用程序中的方法?

当我第一次使用Apache守护进程为Windows开发Java服务时,我使用了我非常喜欢的JVM模式。您指定您的类和开始\停止(静态)方法。但是对于Linux,Jsvc看起来没有相同的选项。我真的很想知道为什么?!无论如何,如果我要使用Linux的init系统,我会尝试找到一种类似的方法来完成相同的行为,即以任何方式启动应用程序但要停止它,我将不得不调用一个方法在类里面。我的问题是,在jar启动后,我如何使用JVM库或其他任何东西来调用我的应用程序中的方法(这将尝试优雅地停止我的应用程序)。另一个问题,如果启动了一个应用程序并且该应用程序具有静态方法,如果我使用java命令行在一个应用

java - 多个 JVM 进程是否可以共享公共(public)类的内存?

我想在我的网络服务器上运行多个Java进程,一个用于每个网络应用程序。我正在使用具有大量支持类和jar文件的Web框架(Play),并且Java进程使用大量内存。一个Play进程显示大约225MB的“常驻私有(private)”内存。(我正在使用Java1.7.0_05在MacOSX上对此进行测试。)特定于应用程序的代码可能只有几MB。我知道典型的JavaWeb应用程序是添加到一个服务器进程(Tomcat等)的jars,但运行Play的标准方式似乎是作为一个独立的应用程序/进程。如果这些是C程序,那么这200MB中的大部分将是共享库,而不是在每个应用程序中重复。有没有办法在Java中实

java - Volatile 关键字和线程本地内存

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我对Java中volatile关键字的用法感到困惑。我在互联网上阅读了很多文章,但仍然一无所获。我脑子里有很多问题想问:首先,维基百科和许多博客都说所有volatile变量都存储在所有线程共享的主内存之上的Thread-Local内存中!我有点困惑,它们是指stackmemory吗?我知道每个线程都有自己的堆栈内存,它存储自己的原始文字和对象引用。如果是这

java - 在非交互式脚本中安装 jre

我想在非交互式脚本中安装jre1.7。有没有一种方法可以等效于以下内容?update-alternatives--configjavaThereare3programswhichprovide'java'.SelectionCommand-----------------------------------------------1/usr/lib/jvm/jre-1.5.0-gcj/bin/java*+2/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java3/usr/lib/jvm/jre1.7/bin/java 最

java - Class对象A是在JVM加载A类时创建的,还是我调用A.class时创建的?

据我所知,每个类都有一个Class对象。我使用synchronize时有一种情况,例如:publicclassA{publicstaticvoidmain(String...args){synchronize(A.class){//dosomething...}}}这将锁定A的Class对象,对吗?这个Class对象是什么时候创建的?它是在JVM加载A类时创建的还是在我调用A.class时创建的?我在JLS中找不到详细信息,有人可以提供相关链接吗? 最佳答案 thiswilllockA'sClassobject,right?是的。m

java - 为什么我的 for 循环执行时间没有改变?

publicclassTest{publicstaticvoidmain(String[]args){intx=150_000;longstart=System.currentTimeMillis();for(inti=0;i有人可以解释为什么将x设置为150_000或4_000_000甚至2_000_000_000不会改变此循环的执行时间吗? 最佳答案 在执行期间,JVM的即时(JIT)编译器将java字节码(类格式)编译为您机器的native指令集。JIT在编译期间执行多项优化。在这种情况下,JIT可能意识到以下内容(只是猜测)

java - 避免 VM 启动时使用的类使用 lambda 和流

通过java.lang.module我在类文档中阅读了以下内容:@implNote...isusedatVMstartupandsodeliberatelyavoidsusinglambdaandstreamusagesincodepathsusedduringstartup.使用此处避免的lambda和流的原因是什么?它们可能产生的影响是什么?插图将有助于更好地理解,但不是在这里寻求意见。 最佳答案 不依赖lambda和流(广泛使用lambda)有助于避免在VMBootstrap中进行冗余工作。这反过来又减少了启动时间和内存占用。