考虑这样一种情况,我必须从我的 Java 程序调用 C++ 代码。C++ 代码创建了数千个对象。这些动态对象存储在哪里?我怀疑是在 JVM 堆中,因为本机代码将是与 JVM 相同的进程的一部分。
如果是,Java 垃圾收集器线程的规则是否适用于 C++ 代码的对象?
非解释语言是否可能有垃圾收集器.解释语言让解释器逐行执行程序,因此解释器也可以提供GC的运行时.但是,如果不在代码本身中构建GC,是否可以为任何其他语言使用垃圾收集器?
请考虑以下代码
public static void method(String[] srgs){
try{
}catch(){
System.out.println("Hello World" + "one");}
catch(..){
System.out.println("Hello World" + "two");}
catch(..){
System.out.println(getString());}
}
Run Code Online (Sandbox Code Playgroud)
这些字符串何时创建?我假设在运行时发生异常时将创建字符串.字符串在运行时创建并显示.我的同伴告诉我,由于这些是常量字符串,因此只要类加载就会创建它们.那是对的吗?
收集Strings垃圾的时间是什么时候?他们是垃圾收集了吗?假设在程序生命周期中可能会多次调用相同的方法,只是缓存它们没有意义吗?
我有两个问题:
如果我有一个对方法的 JNI 调用并且 JNI 方法泄漏内存怎么办。一旦此方法完成,JVM 垃圾收集器将能够取回该内存。听说 JVM 不管理 JNI 使用的堆空间?但是JNI使用的内存是Java进程使用的内存的一部分?
使用JNI来实现IPC是绝对必要的吗?什么是其他流行的 Java 技术,或者是否有开源库来实现 Java 中的共享内存?
对于我正在编写的应用程序,我想知道哪些进程正在访问特定文件并将该信息转储到日志文件中。最后,其中一个进程将删除此文件,我也想知道它的进程名称。
我可以使用 INotify 库来监视文件访问,但它没有给我访问文件的进程名称。这也可以在 linux 上使用 Auditctl 包,但我也不能使用此选项:-(
实际上,出于某些原因,它是一个受控环境,最终客户已准备好运行程序,但尚未准备好安装新软件包或更改现有实用程序。
我有一个有趣的Java内存消耗问题.我有一个本机C++应用程序,它调用我的Java应用程序.
应用程序基本上做了一些语言翻译\解析一些XML并响应网络请求.大多数应用程序的状态不必保留,因此它充满了接受String参数并返回字符串结果的Methods.
随着时间的推移,这个应用程序继续占用越来越多的内存,并且有一段时间它开始占用接近2 GB的内存,这使我们怀疑某些Hashtable或静态变量中存在泄漏.经过仔细检查,我们没有发现任何泄漏.比较一段时间内的堆转储,显示char []和String对象占用大量内存.
然而,当我们检查这些char []时,我们发现它们没有GC根,这意味着它们不应该是泄漏的原因.由于它们是堆的一部分,这意味着它们正在等待垃圾收集.在使用了很好的工具MAT\VisualVM\JHat并滚动浏览了很多这样的对象后,我使用了yourkit的试用版.Yourkit直接提供数据,表示96%的char []和String无法访问.这意味着在进行转储时,堆中96%的字符串正在等待垃圾收集.
我知道GC运行很少但是当你通过VisualVM检查时,你实际上可以看到它正在运行:-(而不是如何在堆上有这么多未使用的对象.
IMO这个应用程序永远不应该超过400-500 MB内存,这是它在前24小时停留的地方,但它继续增加堆:-(
我正在运行Java 1.6.0-25.

谢谢你的帮助.
下面是其中的一部分hs_err_pid
Heap
PSYoungGen total 13888K, used 9807K [0x8a330000, 0x8b140000, 0x914f0000)
eden space 13504K, 69% used [0x8a330000,0x8ac67710,0x8b060000)
from space 384K, 96% used [0x8b0e0000,0x8b13c6e0,0x8b140000)
to space 448K, 0% used [0x8b060000,0x8b060000,0x8b0d0000)
PSOldGen total 115456K, used 57684K [0x514f0000, 0x585b0000, 0x8a330000)
object space 115456K, 49% used [0x514f0000,0x54d451c0,0x585b0000)
PSPermGen total 16384K, used 11253K [0x4d4f0000, 0x4e4f0000, 0x514f0000)
object space 16384K, 68% used [0x4d4f0000,0x4dfed618,0x4e4f0000)
Run Code Online (Sandbox Code Playgroud)
什么是
我正在使用Hibernate 3和MySQL5.5.
我是hibernate的新手,我得到以下例外
Exception in thread "main" org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:106)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:152)
Run Code Online (Sandbox Code Playgroud)
我在hibernate.cfg.xml文件中设置了Dialect属性.我尝试了很多组合
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="DIALECT">org.hibernate.dialect.MySQL5Dialect</property>
Run Code Online (Sandbox Code Playgroud)
什么是实际的属性名称?Hibernate.dialect还是只有方言?什么可能的财产价值?
我正在添加更多信息
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
Run Code Online (Sandbox Code Playgroud)
如下面的答案所示.
我甚至没有构建任何代码只是尝试创建简单的配置:
Configuration cfg = new Configuration().addClass(Employee.class);
sessionFactory = cfg.buildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
下面是实际的配置文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost/test</property>
<property name="connection.username">root</property>
<property name="connection.password">root1234</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<!-- JDBC connection pool (use the built-in) -->
<property …Run Code Online (Sandbox Code Playgroud) 我是一名高级Java职位的候选人,他提到他们广泛使用scala命令提示来调试Java程序.他说甚至可以直接从scala命令提示符调用Java函数.
我从未使用scala,所以我无法验证他的评论.这可能是因为它们都在JVM本身上运行.
快速谷歌搜索没有给出任何指示.
是否真的可以从scala调试Java函数.有人可以给我指点.
提前致谢.
我想将 HTTP 请求的响应写入文件。但是,我想将响应流式传输到物理文件,而无需等待加载整个响应。
我实际上将向 JHAT 服务器发出请求,以从转储中返回所有字符串。我的浏览器在响应完成之前挂起,因为有 70k 个这样的对象,我想将它们写入一个文件,以便我可以扫描。
提前致谢,
java ×6
jvm ×2
audit ×1
dialect ×1
gcc ×1
heap ×1
hibernate ×1
httpresponse ×1
inotify ×1
interpreter ×1
linux ×1
memory-leaks ×1
native ×1
scala ×1
string ×1