Tag: jvm

JVM内存中特定对象的子树的大小

是否可以以编程方式检查一些对象占用多少内存(使用JVM内存中的整个子树)。 我想说(来自java代码) “当我们假设提到的JPanel是这棵树的根”时,告诉我当前JVM中有多少内存将JPanel带到整个引用子树。 我想知道我是否可以通过这种方式比较两个JPanels(或JFrame或其他)需要多少内存,而且需要更多内存 – 而不分析转储。 而且我想知道答案是肯定的,这个值有多精确。

JVM(HotSpot):所有方法都去哪儿了? 方法区? 本机方法堆栈?

我是JVM(HotSpot)的新手,并尝试理解它的架构及其工作原理,所以我的问题是所有的方法(静态和非静态)都被转换成字节码吗? 当JVM加载类文件时,它是否将所有方法加载到某个地方? 像方法区? 或本机方法堆栈?

什么是自定义jvm属性?

我是Java的新手,我遇到过“自定义JVM属性”这个术语,以及如何在eclipse中运行带有自定义JVM属性的配置。 我想了解它的真正含义以及它如何帮助我成为一名程序员。

Class.getConstantPool()

如果从rt.jar库反编译java中的java.lang.Class类,您会注意到有一个本机方法声明: native ConstantPool getConstantPool(); 我前一段时间使用Sun的.class文件规范进行类反编译,我能够从每个.class文件中获取常量池记录。 但这实际上是反编译类。 只是我很惊讶在Class类中看到这个签名。 所以我做的是在Main()方法中写了一小段代码: ConstantPool cp = new ConstantPool(); cp.getMethodAtIfLoaded(0); 如果您反编译sun.reflect.ConstantPool类,您会注意到它有很多与类,方法,参数,声明的字段等相关的方法。 当我执行应用程序时,我收到此HotSpotexception: # # An unexpected error has been detected by HotSpot Virtual Machine: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d7e01d3, pid=2816, tid=5464 # # Java VM: Java HotSpot(TM) Client VM (1.5.0_15-b04 mixed mode) # Problematic frame: # V [jvm.dll+0xa01d3] # # […]

有没有办法编译隐藏源代码?

使用Play或Grails或任何其他JVM框架; 有没有办法(或者是什么方式)完全编译生成的war / jar文件,以便隐藏源代码,而不可能反编译? 或者甚至在编译之后,是否可以轻松地反编译并获取字符串和类? 例如db connection等。 谢谢。

从java中的文件夹ID和父ID创建文件夹

我需要创建一个类来获取存储在数据库中的文件夹列表,并在本地计算机上以正确的层次结构创建它们。 文件夹按如下方式排列在数据库中: id name parent_id 1份文件0 2部电影0 3个video0 4我的档案1 5桌面0 6其他4 所以文档,电影,video和桌面都在根本。 ‘我的文件’进入id为1(文件)的文件夹,’other’进入id为4的文件夹(我的文件) 我一直试图通过使用whyle循环来做到这一点,但不知道如何让他们进入正确的文件夹。 try { con = DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } while( i < 50 ) { try { Statement st = con.createStatement(); ResultSet result = st.executeQuery("SELECT name, id, parent_id FROM categories WHERE parent_id = '"+PID+"' AND repository_id […]

启用JVMTI *function*以查询局部变量的开销

我正在研究一种在JVM上运行的简单动态语言。 其中一个必需的function是: 只有在抛出exception时 ,我才能在抛出exception时查询调用堆栈中所有帧的局部变量。 标准Java或reflection中不提供此function。 因此,我正在考虑以下想法: 在C中编写一个简单的JVMTI共享对象 在Java-land中抛出exception时,触发JVMTI函数 JVMTI lib中的代码暂停抛出exception的Java线程,检查堆栈以提取本地,将它们存储在可访问的位置,并恢复Java线程 除了在这种情况下,JVMTI根本不会被使用。 代码可能会运行几天而不会抛出exception,我希望它的运行速度与非启用JVMTI的代码一样快。 所以我的问题是 :在主流的JVM实现( 即 Oracle)中,启用我需要的JVMTIfunction的开销是多少? 例如,这样做会禁用JIT吗? 我对JVMTI“能力”的最佳猜测是: can_signal_thread can_get_source_file_name can_get_source_debug_extension can_access_local_variables

堆栈消费的变化来自何处?

在从这个问题运行测试代码并摆弄JVM的线程堆栈大小的同时,我发现结果不一定是可重复的:存在堆栈大小的值,程序有时会抛出java.lang.StackOverflowError ,但有时不会 。 我的问题是:“导致堆栈空间消耗变化的原因是什么?” 此外,中断的堆栈可以放在该程序的主线程上吗? 对于其他JVM实现和/或操作系统,结果是否同样不确定? 测试代码 public class PointlessRecursion { private static final long N = 1 << 15; private static long addOne(long n) { return (n < 2) ? n : 1 + (addOne(n – 1)); } public static void main(String[] args) { try { long x = addOne(N); System.out.println(x); assert(x == N); […]

无法重新定义类当我尝试重新转换类时

我试图动态修改类,例如在行之前调用sleep()。 我在运行时使用Attach方法Attach代理程序Attach到jvm。 然后我从jvm获得了目标类,并对其进行了修改(添加一行来调用sleep() )。 我得到了redine类错误。 我使用的是JDK1.6。 我正在使用ASM核心API来修改类。 错误: Caused by: java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields) at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method) at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:124) ASM代码有问题吗? 实际上我的ASM代码完成了它的工作(添加一行来调用sleep() )。 当前的jvm不支持转换类吗? 似乎无法执行retransformClasses() 。 retransformClasses()不支持ASM操作(在方法中添加一行来调用sleep() )? 有任何想法吗? 谢谢 编辑:我要修改的类: import java.util.concurrent.TimeUnit; public class Person { public String name = “abc”; public String address = “xxxxx” ; public […]

JVM是否自动关闭文件?

在某处我读到没有必要自己关闭它,只需离开它,JVM将帮助你做到这一点。 这是真的吗? 假设我需要从文件中获取数据 Source.fromFile(fileName).getLines() 直接,没有 val source = Source.fromFile(fileName) val lines = source.getLines() ………… source.close() 第一种方式,我无法直接访问源并关闭它。 我的JVM工作了很长时间。 我需要关闭一个文件(需要关闭未使用的资源)。 如果有人可以在这里留下一些链接或解释,那将是很棒的。