also das ist es sicher nicht, 1,2GB inaktiver ram der nicht mehr freigegeben wird ist einfach nicht normal. Was soll eigentlich der zweite satz?
Beiträge von beat
-
-
hallo
hab mir ein kleines tool geschrieben mit dem ich verzeichnisstrukturen auf ein anderes spiegeln kann, also ein backup des baums machen kann.
Das Problem ist dass sich aus irgendeinem grund der inaktive physikalische speicher immer weiter aufbläst und am schluss ca. 80% der gesicherten datenmenge ausmacht. Bei einem backup von 1,5Gb werden 1,2GB speicher inaktiv und werden auch nach beenden des Programmes vom os (os x 10.5.1) auch nicht wieder freigegeben. WTF? Das einzige wie ich mir das erklären könnte sind nicht geschlossene Streams, aber die schliesse ich alle brav.
Hat wer eine idee was das verursachen könnte?
Klasse die files kopiert:
Java
Alles anzeigenimport java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JProgressBar; public class FileManager { public FileManager() { } /* * Kopiert das File source nach dest */ public boolean copy(File _source, File _dest) throws IOException { File source = _source; File dest = _dest; if (source.isFile()) { FileInputStream fis = new FileInputStream(source); FileOutputStream fos = new FileOutputStream(dest); if (!dest.exists()) dest.createNewFile(); byte buffer[] = new byte[65536]; // reading 65K blocks long pos = 0; int bytesToWrite = 0; while (dest.length() < source.length()) { bytesToWrite = fis.read(buffer, 0, 65536); fos.write(buffer, 0, bytesToWrite); pos += bytesToWrite; } fis.close(); fos.close(); if (dest.length() == source.length()) return true; } return false; } /* * Kopiert das File source nach dest und handled eine Progressbar (0% - * 100%); */ public boolean copy(File _source, File _dest, JProgressBar progressBar) throws IOException { File source = _source; File dest = _dest; if (source.isFile()) { FileInputStream fis = new FileInputStream(source); FileOutputStream fos = new FileOutputStream(dest); if (!dest.exists()) dest.createNewFile(); byte buffer[] = new byte[65536]; // reading 65K blocks progressBar.setIndeterminate(false); progressBar.setValue(0); long pos = 0; int bytesToWrite = 0; int barValue = 0; int barSteps = -1; int steps = 1; try { steps = (int) (source.length() / 100); } catch (ArithmeticException ae) { } while (dest.length() < source.length()) { bytesToWrite = fis.read(buffer, 0, 65536); barSteps += bytesToWrite; if (barSteps >= steps) { progressBar.setValue(++barValue); barSteps = -1; } fos.write(buffer, 0, bytesToWrite); pos += bytesToWrite; } fis.close(); fos.close(); if (dest.length() == source.length()) { progressBar.setValue(100); return true; } } return false; } }
Klasse die rekursiv den verzeichnisbaum durchgeht
Java
Alles anzeigenimport java.io.File; import java.io.IOException; public class Processor implements Runnable { Thread runner = null; FileManager fileman; long speicherplatz = 0; int totalFileAmount = 1; int backUpped = 1; int filesVisited = 0; float pValue = 0; float x = 0; File root; File mirror; public Processor(File root, File mirror) { fileman = new FileManager(); this.root = root; this.mirror = mirror; if (runner == null) { runner = new Thread(this); runner.start(); } } public void start(File dir) { BackupGUI.appendTextArea(dir.getAbsolutePath()); File[] files = dir.listFiles(); String tmp; if (files.length > 0) { for (int i = 0; i < files.length; i++) { if (files[i].isFile() && !files[i].isHidden()) filesVisited++; x = 100f / totalFileAmount; BackupGUI.progress.setValue(Math.round(x * filesVisited)); tmp = files[i].getAbsolutePath().substring( root.getAbsolutePath().length()); // System.out.println("TPM: " + tmp); if (!new File(mirror + File.separator + tmp).exists()) backupFile(tmp, files[i]); if (new File(mirror + File.separator + tmp).exists()) if (files[i].lastModified() > new File(mirror + File.separator + tmp).lastModified()) backupFile(tmp, files[i]); /* * Rekursiver Aufruf */ if (files[i].isDirectory() && files[i].canRead() && files[i].exists()) start(files[i]); } } } private void backupFile(String directoryName, File file) { // System.out.println(mirror + // directoryName.substring(0,directoryName.lastIndexOf(File.separator))); // System.out.println(mirror + " <<< >>> " + // directoryName.substring(0,directoryName.lastIndexOf(File.separator))); String newFile = ""; File f = new File(mirror + directoryName.substring(0, directoryName .lastIndexOf(File.separator))); f.mkdirs(); newFile = f.getAbsolutePath() + File.separator + file.getName(); File tmp = new File(newFile); try { if (file.length() <= 2000000l) fileman.copy(file, tmp); else fileman.copy(file, tmp, BackupGUI.fileProgress); speicherplatz += file.length(); if (file.isFile() && !file.isHidden()) { backUpped++; BackupGUI.setCorruptTagCounter(backUpped); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void countFiles(File dir) { File[] files = dir.listFiles(); if (files.length > 0) { for (int i = 0; i < files.length; i++) { if (files[i].isFile() && !files[i].isHidden()) totalFileAmount++; if ((totalFileAmount % 10) == 0) { BackupGUI.setSongCounter(totalFileAmount); } if (files[i].isDirectory() && files[i].canRead() && files[i].exists()) countFiles(files[i]); } } } public void run() { long start = System.currentTimeMillis(); BackupGUI.progress.setIndeterminate(true); countFiles(root); BackupGUI.setSongCounter(totalFileAmount); BackupGUI.progress.setIndeterminate(false); x = ((float) totalFileAmount / (float) 100); BackupGUI.progress.setValue(0); start(root); BackupGUI.fileProgress.setValue(0); BackupGUI.progress.setValue(0); BackupGUI.appendTextArea("Alle Daten wurden gesichert"); BackupGUI.appendTextArea("Benötigte Zeit: " + ((double) System.currentTimeMillis() - (double) start) / 1000d + " Sekunden"); BackupGUI.appendTextArea("Benötigter Speicherplatz: " + (speicherplatz / 1000000) + " Mb (" + speicherplatz + " Bytes)"); } }
-
hatte das Problem auch. lad dir ein image von freedos. partitionier mit Bootcamp. starte neu mit freedos. Gib ein Format c:/ starte neu mit xp. jetzt sollte alles funktionieren.
-
ich glaub dir natürlich.
-
hmmm, die graka nimmt sich maximal 0,25gig. es unter os x aber alles in Ordnung ist find ich das ganze schon sehr strange.
-
normalerweise sollte man mit 32 Bit ja 2^32 Bit Ram ansprechen können,wieso kann das xp nicht. os x is ja auch nur 32 bit
-
Hallo
Hab in mein macbook 4GB Ram reingepackt, unter os x werden die auch erkannt, winXP (tu wien studenten verison) checkt allerdings nut 2,97GB??? ist das normal?
-
problem gelöst. Boot.ini
-
hab mir jetzt vmware besorgt, es is hammergeil, nur habe ich ein kleines problem. Beim ersten starten der vm sehe ich dass es beim boot loader von windows 3 möglichkeiten zur auswahl gibt.
Parallels irgendwas...
Windows XP
Unerkanntes betriebsystemer startet von haus aus immer 1 und dann kommt der seltsame fehler mit der nicht gefundenen hal.dll. Beim 2. start kann ich dann winxp auswählen und alles geht prächtig. Wie kann ich den bootloader von windows umschreiben bzw in welcher datei stecken die daten, bzw sind sie überhaupt human readable?
-
Wie lange braucht euer macbook unter leopard zum booten, damit meine ich die zeit vom einschalten bis zum login screen?
-
Hallo
Welche alternativen zu parallels gibt es, hab damit nämlich nur probleme
mfg
-
mal sehen was nächste woche der apple service dazu sagt... werd dann berichten
-
das war ein anderes Gerät. tippe auf Hardwarefehler
-
bist eh no innerhalb der 14 tage?
Was heisst innerhalb der 14 Tage, hab 1 Jahr Garantie...
Hab übrigends ein Macbook, kein Promfg
-
gut, werd das auch nächste woche machen
-
den auswahlbildschirm bekommst du wenn du mit gedrückter alt taste bootest
-
die interne, MacBook 2,2ghz osx 10.5.1
-
Hat wer ein ähnliches problem (tastaturaussetzer für ca. 2 minuten, danach geht alles wieder bis nach einiger zeit der nächste auftritt)
-
es gibt in Java Klassen die dir Methoden zur Berechnung von Large Primas anbieten, glaube zb die Klasse BigInteher
-
vielen dank paul. Als was muss ich das file dann speichern bzw was ist die analoge dateiendung zum *.bat, *.sh?
meinst du die manpage vom sh oder vom bash
mfg